题目:
输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。分析:这是一道广为流传的google面试题。
题目分析:
感觉这个问题和我以前做的一个问题差不多,http://blog.csdn.net/zwb8848happy/article/details/7310846
代码如下:
#include <stdio.h>
#include <math.h>
#include <string.h>
int calNum(int n);
int main()
{
int n;
while (printf("Input n: "),scanf("%d",&n)!=EOF)
{
printf("The result is : %d\n\n",calNum(n));
}
return 0;
}
int calNum(int n)
{
int sum=0,degree,i;
char num[20];
degree=log10((double)n)+1; //求该数是几位数
sprintf(num,"%d",n);
for (i=0;i<degree;i++)
{
sum+=(degree-1-i)*pow(10.0,degree-2-i)*(num[i]-'0');
if (num[i]-'0'==1)
{
sum+=n%(int)pow(10.0,degree-1-i)+1;
}
else if (num[i]-'0'>1)
{
sum+=pow(10.0,degree-1-i);
}
}
return sum;
}