问题描述:给定一个整数n,统计从1到n(数字最高位不允许为0)这么多个数中0,1,2,3,4,5,6,7,8,9分别出现的次数。
问题解决:采用递归求解统计每一个数字0,1,2,....,9出现的次数累加。
源代码:
#include "stdafx.h"
#include<stdio.h>
int results[10];
void count(int n)
{
while(n>0)
{
results[n%10]+=1;
n=n/10;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int page;
int i;
for(i=0;i<10;i++)
results[i]=0;
scanf("%d",&page);
for(i=1;i<=page;i++)
count(i);
printf("\nresult:\n");
for(i=0;i<10;i++)
printf("%d出现的次数为%d\n",i,results[i]);
return 0;
}
问题扩展:
如果输入的数字为1000000,则时间不符合要求,需要改进算法。例如统计其中出现的1的次数,见《编程之美》,10000000统计其中出现的1的次数需要的时间不超过1ms。