算法思想:
循环求出每个数中1个数累计的若满足f(n)=n则退出否则继续
代码如下:
/**//************************************************************************
*0~n的间1个数,如f(13)=6
*1,2,3,4,5,6,7,8,9,10,11,12,13.1个数为6
*要求:输入个正整数n,求出f(n),及求解f(n)=n
************************************************************************/
#<stdio.h>
#<.h>
#<Windows.h>
CalculationTimes
...{
public:
CalculationTimes...{}
~CalculationTimes...{}
GetTimes(n);
};
//计算正整数n中1个数
CalculationTimes::GetTimes(n)
...{
count=0;
while(n)
...{
(n%101)
count;
n/=10;
}
count;
}
//显示菜单
voidshow_menu
...{
prf(\"---------------------------------------------\");
prf(\"inputcommandtotesttheprogram\");
prf(\"iorI:inputntotest\");
prf(\"gorG:getntoenablef(n)=n\");
prf(\"qorQ:quit\");
prf(\"---------------------------------------------\");
prf(\"$inputcommand>\");
}
void
...{
charsinput[10];
n;
show_menu;
scanf(\"%s\",sinput);
while(stricmp(sinput,\"q\")!=0)
...{
t=0,count=0;
(stricmp(sinput,\"i\")0)
...{
prf(\"pleaseinputaneger:\");
scanf(\"%d\",&n); [Page]
count=0;
CalculationTimesobj;
t=GetTickCount;
for(i=1;i<=n;i)
countobj.GetTimes(i);
t=GetTickCount-t;
prf(\"count=%dtime=%d\",count,t);
}
(stricmp(sinput,\"g\")0)
...{
CalculationTimesobj;
n=2;
count=1;
t=GetTickCount;
while(1)
...{
countobj.GetTimes(n);
(countn)
;
n;
}
t=GetTickCount-t;
prf(\"f(n)=n=%dtime=%d\",n,t);
}
//输入命令
prf(\"$inputcommand>\");
scanf(\"%s\",sinput);
} [Page]
}
运行结果如下:
最新评论