溢出之后 – Garcia-0

通常,int类型(32位补码表示)的最大值INT_MAX = 231 -1 = 2147483647,于是有109 < INT_MAX < 1010

  • 有个int类型的数10倍10倍地增长,如果不记录乘过的次数,怎么判断它是否已经溢出了?

把1010丢进int类型的变量里,恩,溢出了,溢出咋滴?

溢出了可能变负数了。

溢出了可能就比109小了。

然而并没有。

1010 mod 232 = 1410065408

INT_MAX小,所以是个正数。比109大。

我就来反思下我做(https://leetcode.com/problems/number-of-digit-one/)时犯的二。当然在while条件里写divisor < 0时候我还是有些疑虑的……

int countDigitOne(int n) {
if(n <= 0) return 0;

int sum = 0;
int add_unit = 1;
int remain = 0;
int quotient = n;

while(quotient > 0 ){
int cur_digit, divisor;
divisor = add_unit*10;
if(quotient > 9){
quotient = n/divisor;
}
else{
quotient = 0;
}
cur_digit = (n/add_unit)%10;

sum += quotient * add_unit;

if(cur_digit >= 2){
sum += add_unit;
}
else if (cur_digit ==1)
{
sum += remain + 1;
}

remain = n%divisor;
add_unit *= 10;
};

return sum;
}

后来看见有人用long long类型,胸中顿时有千万匹可爱的小动物奔驰而过……

本文链接:溢出之后,转载请注明。



You must enable javascript to see captcha here!

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress

无觅相关文章插件,快速提升流量