C语言中求等于其各位数字的阶乘之和的正整数
解决时间 2021-03-06 12:41
- 提问者网友: 妳莂騙莪
- 2021-03-05 16:23
求这样一个 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");
}
请问哪个地方出错了?
真诚地希望哪个大侠帮忙改一下!!
最佳答案
- 二级知识专家网友:北方尋麓
- 2021-03-05 17:59
#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");
}
全部回答
- 1楼网友:月洸芐啲溫拵
- 2021-03-05 18:28
#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);}}
我要举报
如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
点此我要举报以上问答信息
推荐资讯