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

C语言中求等于其各位数字的阶乘之和的正整数
求这样一个 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");
}
m=0的位置不对
应该放在for(i=pow……的那层循环悄携里边

if(i==m)
{ p=1; printf("%f\n",i);}}
i是整型,
if(i==m)
{ p=1; printf("%d\梁裂n"橡运闭,i);}}
在这里数据是int型较好,你的程序有点乱,我说一下我的算法:先确定n位数能表示的范围,i从最小值到乱扒最大值逐个验证(将i的每一位分纳陵离哗茄昌出来)若符合条件,显示出来
← 上一篇: 下一篇: →