zoukankan      html  css  js  c++  java
  • 《编程之美》统计1的个数

    今天看了《入门经典》上的一道题,打算来存个统计位数的模板,一般都是用数位dp来做,但统计单个数字可以特殊处理。


    题目:对1~n统计1个数。

    题目简单,分析可以看: 

    从0开始到某个数N有点多少个1——编程之美2.4

    举个例子:

    对于一个数abcde,取百位上的c来计算,
    假若c是"1",那么百位上1的个数是由他的高位和低位来决定的。等于ab*100+cde+1;
    假若c是"0",那么百位上1的个数是ab*100;
    假如c是大于1,那么 百位上1的个数是(ab+1)*100


    然后就上代码了:

     1 #include<cstdio>
     2 #define LL long long 
     3 
     4 LL n,count;
     5 
     6 LL sum_1(LL n)
     7 {
     8     count=0;
     9     LL factor=1,lownum=0,curnum=0,highnum=0;
    10     while(n/factor)//从低到高 
    11     {
    12         lownum=n-(n/factor)*factor;//低位数字 
    13         curnum=(n/factor)%10;//当前位数字 
    14         highnum=n/(factor*10);//高位数字 
    15         switch(curnum)
    16         {
    17             case 0:
    18                 count+=highnum*factor;
    19                 break;
    20             case 1:
    21                 count+=highnum*factor+lownum+1;
    22                 break;
    23             default:
    24                 count+=(highnum+1)*factor;
    25                 break;    
    26         }
    27         factor*=10;//位数升高 
    28     }
    29     return count;
    30 }
    31 
    32 int main() 
    33 {
    34     for(;scanf("%lld",&n)!=EOF;)
    35     {
    36         printf("count=%lld
    ",sum_1(n));
    37     }
    38     return 0;
    39 }
    View Code

    不懂得尽情问啊~~

    -END-

  • 相关阅读:
    姚班
    xxx
    1358B
    1368A
    莫烦Tensorflow 建造自己的NN
    莫烦Tensorflow 入门
    linux服务器安装Apache (Centos)
    C++ 获取Linux 服务器CPU占用率+内存空闲率(亲测绝对可以运行)
    MySQL主键从初始值自增
    基础练习 矩阵乘法
  • 原文地址:https://www.cnblogs.com/chendl111/p/5688594.html
Copyright © 2011-2022 走看看