nbutoj1475

来源:互联网 发布:山东省卫生网络直报 编辑:程序博客网 时间:2024/05/16 17:36
  • [1475] Bachelor

  • 时间限制: 1000 ms 内存限制: 65535 K
  • 问题描述
  • 炎热的暑期集训就要结束了,在这短短的20天,大家都很努力,因为很多都是光棍嘛。balabala
    所以 Marknoon 先森一直耿耿于怀,毕竟他也是单身嘛。
    有一天,Marknoon 先森看着一串数字,发现了那个跟他同命相连的数字1,所以他就开始无聊起来,想知道从数字1到数字N,一共出现了几个1。
    例如N=12,则1的个数为5,出现1的数字分别为1,10,11,12。
  • 输入
  • 输入一个数N(1 <= N <= 2147483647)。
  • 输出
  • 输出从1到N中所有数字里出现 1 的个数。
  • 样例输入
  • 313123
  • 样例输出
  • 1657

     

    #include<iostream>#include<cstdio>#include<cstring>using namespace std;int main(){__int64 num[11],m,n,j,k,l,sum;num[0]=0;num[1]=1;num[2]=20;num[3]=300;num[4]=4000;num[5]=50000;num[6]=600000;num[7]=7000000;num[8]=80000000;num[9]=900000000;while(scanf("%I64d",&m)>0){n=m;sum=0;k=0;l=1;while(n!=0){j=n%10;n=n/10;if(j==1)sum+=m%l+1+num[k];else if(j>1)sum+=l+j*num[k];k++;l*=10;}printf("%I64d",sum);printf("\n");}return 0;}


     

     

  • 原创粉丝点击