-
[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 的个数。
- 样例输入
-
3 13 123
- 样例输出
-
1 6 57
#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; }
nbutoj1475
最新推荐文章于 2022-08-10 14:36:24 发布