题解 | #整数中1出现的次数(从1到n整数中1出现的次数)#

整数中1出现的次数(从1到n整数中1出现的次数)

http://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6

一步步分情况讨论

public:
    int get_99(int n){
         if(0 <n && n < 9){
            return 1;
        }
        if(n == 10){
            return 2;
        }
        else if(n < 20){
            return n - 7;
        }
        else if( n < 100){
            int a = 0, b = 0;
            a = n / 10;
            b = n % 10 > 0? 1 : 0;
            return n / 10 +  10 + b;
        }
        return 0;
    }
    int get_999(int n){
       if(0 <n && n < 9){
            return 1;
        }
        if(n == 10){
            return 2;
        }
        else if(n < 20){
            return n - 7;
        }
        else if( n < 100){
            int a = 0, b = 0;
            a = n / 10;
            b = n % 10 > 0? 1 : 0;
            return n / 10 +  10 + b;
        }
        else if( n < 200){
            int c = n % 100;
            if(c < 9){
              c = c + 1;
            }
            else if(c < 20){
               c = c  + c - 8;
           }
           else if( c < 100){
               int a = 0, b = 0;
               a = c / 10;
               b = c % 10 > 0? 1 : 0;
               c = c + c / 10 +  10 + b;
           }
            return c + 20;
        }
        else if(n < 1000){
            return 20 * (n / 100) + 100 + get_99(n % 100);
        }
        return 0;
    }
    int get_9999(int n){
        if(n == 0){return 0;}
         if(0 <n && n < 9){
            return 1;
        }
        if(n == 10){
            return 2;
        }
        else if(n < 20){
            return n - 7;
        }
        else if( n < 100){
            int a = 0, b = 0;
            a = n / 10;
            b = n % 10 > 0? 1 : 0;
            return n / 10 +  10 + b;
        }
        else if( n < 200){
            int c = n % 100; 
            if(c < 9){
              c = c + 1;
            }
            else if(c < 20){
               c = c  + c - 7;
           }
           else if( c < 100){
               int a = 0, b = 0;
               a = c / 10;
               b = c % 10 > 0? 1 : 0;
               c = c + c / 10 +  10 + b;
           }
            return c + 20;
        }
        else if(n < 1000){
            return 20 * (n / 100) + 100 + get_99(n % 100);
        }
        else if(n < 2000){
            return n % 1000 + get_999(n % 1000) + 300 + 1;
        }
        else if(n < 10000){
            return 300*(n/1000) + 1000 + get_999(n % 1000);
        }
        return 0;
    }
    
    int NumberOf1Between1AndN_Solution(int n) {
        if(n == 0){return 0;}
       if(0 < n &&  n < 9){
            return 1;
        }
        if(n == 10){
            return 2;
        }
        else if(n < 20){
            return n - 7;
        }
        else if( n < 100){
            int a = 0, b = 0;
            a = n / 10;
            b = n % 10 > 0? 1 : 0;
            return n / 10 +  10 + b;
        }
        else if( n < 200){
            int c = n % 100; 
            if(c < 9){
              c = c + 1;
            }
            else if(c < 20){
               c = c  + c - 7;
           }
           else if( c < 100){
               int a = 0, b = 0;
               a = c / 10;
               b = c % 10 > 0? 1 : 0;
               c = c + c / 10 +  10 + b;
           }
            return c + 20;
        }
        else if(n < 1000){
            return 20 * (n / 100) + 100 + get_99(n % 100);
        }
        else if(n < 2000){
            return n % 1000 + get_999(n % 1000) + 300 + 1;
        }
        else if(n < 10000){
            return 300*(n/1000) + 1000 + get_999(n % 1000);
        }
        else if(n < 20000){
            return n % 10000 + 4000 + get_9999(n % 10000) + 1;
        }else{
            return 4000*(n/10000) + 10000 + get_9999(n % 10000);
        }
    }
};
全部评论

相关推荐

06-02 15:53
阳光学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务