zoukankan      html  css  js  c++  java
  • 计算1-n之间1的个数

    求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。
    找规律题,
    0-9 1的个数,pow(10,0)+100
    0-99 1的个数 pow(10,1)+(pow(10,0)+10
    0)10
    0-999 1的个数 pow(10,2)+(pow(10,1)+(pow(10,0)+10
    0)10)10
    然后从右到左一次计算1出现的个数,例如21345,
    5:1;
    4:10 + 41;
    3:100 + 3
    20;
    1:345+100+1(2010);
    2:10000+2((2010+100)* 10 + 1000));
    1为特殊情况,如果为21345,不考虑万位,则千位为1,只有345个,那么计算0-999的1的个数即可。

    public class Solution {
        public int NumberOf1Between1AndN_Solution(int n) {
            int level = 1,count = 0;
            int num = n;
            while(n>0){
                int p = n%10;
                if(p > 1){
                   count += chen(level-1) * p + (int)Math.pow(10,level-1);
                }else if(p==1){
                    count += chen(level-1)+(level == 1?1:1+num%((int)Math.pow(10,level-1)));
                }
                level++;
                n = n / 10;
            }
            return count;
        }
        int chen(int level){
            if(level == 0)    return 0;
            return 10*chen(level-1)+(int)Math.pow(10,level-1);
        }
    }
    
  • 相关阅读:
    django email用法
    django ImageField用法
    django集成微博内容
    python读写zip文件
    读写文件
    404渲染
    bzoj1297 / P4159 [SCOI2009]迷路
    bzoj1009 / P3193 [HNOI2008]GT考试
    poj2115 C Looooops(exgcd)
    bzoj1407 / P2421 [NOI2002]荒岛野人(exgcd)
  • 原文地址:https://www.cnblogs.com/a1225234/p/11024634.html
Copyright © 2011-2022 走看看