Universe7的神奇数
描述
Universe7从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的三位数145,这个数,它的各个位数的阶乘之和等于它本身。
啊哈,真是巧啊。Universe7非常喜欢这种数,由于他的发现,所以这里我们命名其为Universe7的神奇数。但是要判断这样的数还是有点麻烦啊,那么现在请你找出在当前范围内( [1, 21474836] )所有的Universe7的神奇数吧。
我们认为0的阶乘等于1.
输入
no input
输出
输出所有Universe7的神奇数,每个数占一行。
#include<stdio.h>
int main()
{
int n,m;
int a[105];
int i,j,t;
while(~scanf("%d%d",&n,&m))
{
int sum=0,cnt=0;
for(i=0; i<n; i++)
scanf( "%d",&a[i]);
for(j=0; j<n; j++)
for(i=0; i<n-1-j; i++)
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0; i<n; i++)
{
sum+=a[i];
if(sum<=m)
cnt++;
}
printf("%d\n",cnt);
}
return 0;
}
第2种办法
#include<stdio.h>
int fun(int n)
{
if(n==0)
{
return 1;
}
return fun(n-1)*n;
}
int fun1(int n)
{
if(n==0)
{
return 1;
}
return fun1(n-1)*10;
}
int main()
{
int sum=0;
int n=1;
int i=0;
int j=0;
for(n=1; n<8; n++)
{
int p=fun1(n);
int q=fun(9);
for(i=fun1(n-1); i<p&&i<n*q; i++)
{
sum=0;
j=i;
while(j)
{
sum+=fun(j%10);
j/=10;
if(sum>i)
{
break;
}
}
if(i==sum)
{
printf("%d\n",sum);
}
}
}
return 0;
}