给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
12
5
#include<stdio.h>
#include<math.h>
int main()
{
long long n,i,j,sum,s,b;
while(scanf("%lld",&n)!=EOF)
{
sum=0;b=1;
for(i=0;;i++)
{
if(n/b==0)
break;
s=(n/b)%10;
if(s==0)
{
sum=sum+n/(b*10)*b;
}
else if(s==1)
{
sum=sum+n/(10*b)*b+(n%b+1);
}
else
{
sum=sum+(n/(10*b)+1)*b;
}
b=b*10;
}
printf("%lld\n",sum);
}
return 0;
}
/*
#include<stdio.h>
int main()
{
long long n,i,j,sum,a;
while(scanf("%lld",&n)!=EOF)
{
sum=0;
for(i=1;i<=n;i++)
{
a=i;
while(1)
{
if(a==0)
{
break;
}
if(a%10==1)
{
sum++;
}
a=a/10;
}
}
printf("%lld\n",sum);
}
return 0;
}
*/