大众信息网

C语言中求等于其各位数字的阶乘之和的正整数

关注:245  答案:3  手机版
解决时间 2021-03-06 12:41
求这样一个 n 位数( >0 ),它等于其各位数字的阶乘之和。输入位数 n ,输出所有满足条件的 n 位数。例如, 145=1 ! +4 ! +5 !若不存在这样的 n 位数,则输出: No output
输入: n
输出: 满足条件的 n 位数
例如:输入3 输出145
我编写的程序:
#include"stdio.h"
#include"math.h"
main()
{ float b[20]={0,1,2,6,24,120,720,5040,40320,362880},m=0,p=0,c,n;
int i,j,k,a[100];
scanf("%f",&n);
{for(i=pow(10,n-1)+1;i for(j=1;j<=n;j++)
{c=pow(10,j-1);
k=i/c;;
a[j]=k%10;
m=m+b[a[j]];}
if(i==m)
{ p=1; printf("%f\n",i);}}
if(p==0)
printf("No output\n");
}
请问哪个地方出错了?
真诚地希望哪个大侠帮忙改一下!!
最佳答案
#include"stdio.h"
#include"math.h"
main()
{
float b[20]={1,1,2,6,24,120,720,5040,40320,362880},m,p=0,c;//0的阶乘是1.。
int i,j,k,a[100],stop,n;

scanf("%d",&n);//最好用%d
//{这个大括号加得很奇怪。。。
//不建议下面注释掉的做法,因为每次开始都要调用一次pow函数,
//会增加程序耗费时间,虽然对现在的机器似乎没关系。
//for(i=pow(10,n-1)+1;i i=pow(10,n-1)+1;
stop=pow(10,n);

for(;i {
m=0;//这里要恢复为0,否则就是累计了
for(j=1;j<=n;j++)
{
c=pow(10,j-1);
k=i/c;
a[j]=k%10;
m=m+b[a[j]];
}

if(i==m)
{
p=1;
printf("%d\n",i);//最好%d
}
}

if(p==0)
printf("No output\n");
}
全部回答
#include main() {int n,i,k=0,a,b,s,m0,m=1,t; scanf("%d",&n); for(i=1;i<=n;i++) m=m*10; m0=m/10; for(;m>=m0;m--) //大循环中的m值 { t=m; for(i=1,s=0;i<=n;i++,t=t/10)//这里改变了大循环的m值,使大循环不能 //确运行; {b=t%10; if(b==0)b++; for(a=1;b>0;b--) a=a*b; s+=a;} if(s==m){printf("%d\n",m);k++;}} if(k==0)printf("no output\n");
m=0的位置不对 应该放在for(i=pow……的那层循环里边 if(i==m) { p=1; printf("%f\n",i);}} i是整型, if(i==m) { p=1; printf("%d\n",i);}}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!