Redian新闻
>
str2int中overflow该如何处理?
avatar
str2int中overflow该如何处理?# JobHunting - 待字闺中
C*y
1
我的想法是
先转成一个long,然后和INT_MIN和INT_MAX比
最后convert成int输出
不知这个办法是否合适
avatar
j*u
2
在每次
result = result * 10 + str[i] - '0';
之后check result < 0,如果overflow就会变负
如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov
erflowException()

【在 C***y 的大作中提到】
: 我的想法是
: 先转成一个long,然后和INT_MIN和INT_MAX比
: 最后convert成int输出
: 不知这个办法是否合适

avatar
C*y
3
这个办法不错
谢谢!

【在 j*****u 的大作中提到】
: 在每次
: result = result * 10 + str[i] - '0';
: 之后check result < 0,如果overflow就会变负
: 如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov
: erflowException()

avatar
l*a
4
之前处理也可以,也许更直接
目标 result*10+str[i]-'0'<=MAX_INT
1) result2) result=MAX_INT/10 && str[i]-'0'<=MAX_INT/10

【在 C***y 的大作中提到】
: 这个办法不错
: 谢谢!

avatar
C*y
5
是不是应该先判断一下 result==INT_MIN
result==INT_MIN的时候虽然<0,但实际上是没有overflow的

【在 j*****u 的大作中提到】
: 在每次
: result = result * 10 + str[i] - '0';
: 之后check result < 0,如果overflow就会变负
: 如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov
: erflowException()

avatar
m*m
6

str[i]-'0'<=MAX_INT%10 ?

【在 l*****a 的大作中提到】
: 之前处理也可以,也许更直接
: 目标 result*10+str[i]-'0'<=MAX_INT
: 1) result: 2) result=MAX_INT/10 && str[i]-'0'<=MAX_INT/10

avatar
l*a
7
什么问题?
think about last digit of 65534 , 65535 and 65538

【在 m******m 的大作中提到】
:
: str[i]-'0'<=MAX_INT%10 ?

avatar
m*m
8

我的意思是:不是 str[i]-'0'<=MAX_INT/10,应该是str[i]-'0'<=MAX_INT%10吧

【在 l*****a 的大作中提到】
: 之前处理也可以,也许更直接
: 目标 result*10+str[i]-'0'<=MAX_INT
: 1) result: 2) result=MAX_INT/10 && str[i]-'0'<=MAX_INT/10

avatar
l*a
9
oh,yes
u got it

【在 m******m 的大作中提到】
:
: 我的意思是:不是 str[i]-'0'<=MAX_INT/10,应该是str[i]-'0'<=MAX_INT%10吧

avatar
r*t
10
overflow 不一定变负的。

【在 j*****u 的大作中提到】
: 在每次
: result = result * 10 + str[i] - '0';
: 之后check result < 0,如果overflow就会变负
: 如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov
: erflowException()

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。