溢出之后
通常,int类型(32位补码表示)的最大值INT_MAX = 231 -1 = 2147483647,于是有109 < INT_MAX < 1010。
- 有个int类型的数10倍10倍地增长,如果不记录乘过的次数,怎么判断它是否已经溢出了?
把1010丢进int类型的变量里,恩,溢出了,溢出咋滴?
溢出了可能变负数了。
溢出了可能就比109小了。
然而并没有。
1010 mod 232 = 1410065408
比INT_MAX小,所以是个正数。比109大。
我就来反思下我做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类型,胸中顿时有千万匹可爱的小动物奔驰而过……