zoukankan      html  css  js  c++  java
  • 溢出之后

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

  • 相关阅读:
    C#反射
    做下一周计划
    OFFSET 函数
    微信跳一跳学习笔记
    跳一跳脚本代码搬运
    预测羽毛球赛成绩学习笔记
    将Python123中作业成绩绘制成雷达图
    Matplotlib库
    Numpy库
    第四周作业
  • 原文地址:https://www.cnblogs.com/garcia-0/p/4681082.html
Copyright © 2011-2022 走看看