您的位置:首页 > 其它

给定一个任意的10进制数N,从1开始到N,计算所有数中1出现的次数

2014-03-24 17:17 295 查看
首先可以对分别对1位数,2位数,3位数,每一位出现1的个数,分别寻找规律,通过仔细查看可以看到,每位1的个数与当前位上的数有关系,并且与他高位的数有关系,低位的数也有关系。

具体如下:

假设N(个,十,百,千……)位上的数字为0,那么N位上为1的个数为其高位的数字乘以当前的位(个,十,百,千,万……)

假设N(个,十,百,千……)位上的数字为1,那么N位上为1的个数为其高位的数字乘以当前的位(个,十,百,千,万……),加上低位数+1(因为从0开始的)

N位上的数字为其他的数字的时候,则其相当于高位的数字乘以当前的位,因为当前位大于1,因此会多出来0-99……个数来,所以高位应该是(高位数+1)*当前位

#include<stdio.h>

void count(int n)
{
int sum=0,iCurNum,iLowNum,iHighNum;
int iFactor=1;//因子

while(n/iFactor!=0)
{
iLowNum  = n-(n / iFactor) * iFactor;
iCurNum  = (n / iFactor) % 10;
iHighNum = n / (iFactor * 10);
switch(iCurNum)
{
case 0:sum += iHighNum*iFactor;break;
case 1:sum += iHighNum * iFactor + iLowNum + 1;break;
default:
sum += (iHighNum+1) * iFactor;break	;
}
iFactor *=10;
}
printf("%d\n",sum);

}

void main(void)
{
int n;
scanf("%d",&n);
count(n);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐