str2int中overflow该如何处理?# JobHunting - 待字闺中C*y2011-02-20 08:021 楼我的想法是先转成一个long,然后和INT_MIN和INT_MAX比最后convert成int输出不知这个办法是否合适
j*u2011-02-20 08:022 楼在每次result = result * 10 + str[i] - '0';之后check result < 0,如果overflow就会变负如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw OverflowException()【在 C***y 的大作中提到】: 我的想法是: 先转成一个long,然后和INT_MIN和INT_MAX比: 最后convert成int输出: 不知这个办法是否合适
C*y2011-02-20 08:023 楼这个办法不错谢谢!【在 j*****u 的大作中提到】: 在每次: result = result * 10 + str[i] - '0';: 之后check result < 0,如果overflow就会变负: 如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov: erflowException()
l*a2011-02-20 08:024 楼之前处理也可以,也许更直接目标 result*10+str[i]-'0'<=MAX_INT1) result2) result=MAX_INT/10 && str[i]-'0'<=MAX_INT/10【在 C***y 的大作中提到】: 这个办法不错: 谢谢!
C*y2011-02-20 08:025 楼是不是应该先判断一下 result==INT_MINresult==INT_MIN的时候虽然<0,但实际上是没有overflow的【在 j*****u 的大作中提到】: 在每次: result = result * 10 + str[i] - '0';: 之后check result < 0,如果overflow就会变负: 如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov: erflowException()
m*m2011-02-20 08:026 楼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
l*a2011-02-20 08:027 楼什么问题?think about last digit of 65534 , 65535 and 65538【在 m******m 的大作中提到】: : str[i]-'0'<=MAX_INT%10 ?
m*m2011-02-20 08:028 楼我的意思是:不是 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
l*a2011-02-20 08:029 楼oh,yesu got it【在 m******m 的大作中提到】: : 我的意思是:不是 str[i]-'0'<=MAX_INT/10,应该是str[i]-'0'<=MAX_INT%10吧
r*t2011-02-20 08:0210 楼overflow 不一定变负的。【在 j*****u 的大作中提到】: 在每次: result = result * 10 + str[i] - '0';: 之后check result < 0,如果overflow就会变负: 如果C#的话用checked{ } wrap,或者complier打开/checked+,就会自动throw Ov: erflowException()