给定一个十进制正整数N,写下从1开始,到N的所有正数,计算出其中出现所有1的个数。
例如:n = 12,包含了5个1。1,10,12共包含3个1,11包含2个1,总共5个1。
输入
输入N(1 <= N <= 10^9)
输出
输出包含1的个数
输入样例
12
输出样例
5
思路:从低位到高位依次数1出现的个数
例如:输入71906
个位出现1:1~71901 一共出现7190+1次
十位出现1:10~7181x(0<=x<=9) 一共出现(719-1+1)*10次(十位是0要减1)
百位出现1:100~711xx 一共出现(71+1)*100次
千位出现1:1000~61xxx 和71000~71906 一共出现(7-1+1)*1000+(71906-71000+1)次(千位是1减1)
万位出现1:10000~1xxxx 一共出现(0+1)*10000次
#include<stdio.h>
int main(void)
{
int num,sum=0,t=1,p;
scanf("%d",&num);
p=num;
while(num!=0)
{
if(num%10>1)
{
sum=sum+(num/10+1)*t;
}
else if(num%10==0)
{
sum=sum+(num/10-1+1)*t;
}
else
{
sum=sum+(num/10-1+1)*t+(p-num*t+1);
}
t=t*10;
num=num/10;
}
printf("%d",sum);
return 0;
}