溢出之后

通常,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类型,胸中顿时有千万匹可爱的小动物奔驰而过……

posted @ 2015-07-27 20:05  Garcia-0  阅读(826)  评论(0编辑  收藏  举报