2871: 小T的魔法数字
时间限制: 1 Sec 内存限制: 128 MB
提交: 225 解决: 52
[状态] [讨论版] [提交] [命题人:541703040109]
题目描述
小T偶然间发现了一些魔法数字,这些数字可以转换为任意数的阶乘,如1、2、6、24...。小T想知道,对于某一个整数,至少需要多少个魔法数字组成呢?
输入
多样例测试,以读到文件末尾作为结束,样例数不超过100000。
每行输入一个整数N,0<=N<=1e18。
输出
对于每行输入,输出至少需要多少个魔法数字组成,单独占一行。
样例输入 Copy
6
8
23
样例输出 Copy
1
2
6
提示
6 = 3!
8 = 2!+3!
23 = 1! + 2! x 2 + 3!x 3
做题思路:
整数N(0<=N<=1e18)可以将N定义为long long类型;
先找离N最近且小于N的阶乘P=M!;
然后开始用N循环减去该阶乘P,当N小于M时,让P=(M-1)!,
继续用N循环减去该阶乘P……
依此类推
一直减到N=0,计算减去P的次数,输出就行了;
代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
long long a,b,c,i,d;
while(scanf("%lld",&a)!=EOF)
{
b=1,c=0;
if(c==0)
for(i=1;i>0;i++)
{
b*=i;
if(b>a)
break;
}
while(a!=0)
{
b=b/i;
while(a>=b)
{
a=a-b;
c++;
}
i--;
}
printf("%lld\n",c);
}
return 0;
}