给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
Input输入N(1 <= N <= 10^9)Output输出包含1的个数Sample Input例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
12
Sample Output
5
#include<stdio.h>
int main(void)
{
long long n,a=1,b,i,j=0,d,c=0,w;
scanf("%lld",&n);
int ar[100];
w=n;
while(w)
{
a*=10;
j++;
w/=10;
}
w=n;b=10;
for(i=j;i>=1;i--)
{
ar[i]=w%b;
w/=10;
}
d=1;
while(a>=10)
{
c+=(n/a)*(a/10);
if(ar[d]>1) c+=a/10;
else if(ar[d]==1)
{
c+=(n%(a/10))+1;
}
a/=10;
d++;
}
printf("%lld\n",c);
}