您的位置:首页 > 职场人生

在从1到n的正数中1出现的次数 【微软面试100题 第三十题】

2014-10-30 22:25 246 查看
题目要求:

  给定 一个十进制正整数N,写下从1开始,到N的所有整数,然后数一下其中出现的所有“1”的个数。

例如:N = 2,写下1,2.这样只出现了1个“1”。

N = 12,我们会写下1,2,3,4,5,6,7,8,9,10,11,12.这样,1的个数是5.

  参考资料:编程之美2.4 1的数目

题目分析:

  方法1:遍历从1~N的所有数,每个数对10取余,如果余数为1,则有一个1.

[b]

#include <stdio.h>

int Sumls(int n)
{
int iCount=0,iFactor=1,iLowerNum=0,iCurrNum=0,iHigherNum=0;
while(n/iFactor!=0)
{
iLowerNum=n-(n/iFactor)*iFactor;
iCurrNum=(n/iFactor)%10;
iHigherNum=n/(iFactor*10);

switch(iCurrNum)
{
case 0:
iCount+=iHigherNum*iFactor;
break;
case 1:
iCount+=iHigherNum*iFactor+iLowerNum+1;
break;
default:
iCount+=(iHigherNum+1)*iFactor;
break;

}
iFactor*=10;

}
return iCount;
}

int main()
{
int i;

for(i = 1;i < 52;i++)
{
printf("%d里面含有 %d 个1\n",i,Sumls(i));
}

return 0;
}


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