找1
一、题目:
给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数。
要求:
写一个函数 f(N) ,返回1 到 N 之间出现的 “1”的个数。例如 f(12) = 5;
在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少?
二、思路:
根据老师在课上提供的思路,有以下的思路:
f(3)=1
f(13)=(1+1)+4 f(23)=(2+1)+10 f(33)=(3+1)+10 …. f(99)=(9+1)+10
f(103)=(10+1)+10+4 f(113)=(11+1)+(13+1)+14 f(123)=(23+1)+(12+1)+20 … f(193)=(93+1)+(19+1)+20
…
三、代码
#include <iostream.h>
int f(int num)
{
int sum=0;
int factor=1;
int lower=0;
int now=0;
int higher=0;
while(num/factor!=0)
{
lower=num-(num/factor)*factor;
now=(num/factor)%10;
higher=num/(factor*10);
switch(now)
{
case 0:
sum+=higher*factor;
break;
case 1:
sum+=higher*factor+lower+1;
break;
default:
sum+=(higher+1)*factor;
break;
}
factor*=10;
}
return sum;
}
四、截图
五、总结
老师出题的重点是思路,思路是有了,但是编程的时候感觉好费力,参考了多位同学的成果,基础太不扎实了。