一个简单的C语言程序

求这样一个n位数(>0),它等于其每位数字的阶乘之和。输入位数n,输出所有满足条件的n位数。例如,145=1!+4!+5!若不存在这样的n位数,则输出:Nooutput。... 求这样一个n位数(>0),它等于其每位数字的阶乘之和。输入位数n,输出所有满足条件的n位数。例如,145=1!+4!+5!若不存在这样的n位数,则输出:No output。

输入: n

输入3 结果145

我的程序总是不对 怎么回事呢??

#include <stdio.h>
#include <math.h>
main()
{
int n,i,j,k=0,m,a=0,b=0;
scanf("%d",&n);
for(i=pow(10,n-1);i<pow(10,n);i++)
{
for(j=1;k=0,j<=n;j++)
{m=pow(10,j-1);

a=i/m%10;
k+=jc(a);
a=0;}
if(k==i) printf("%d\n",i);b++;
}
if(b==0) printf("No output\n");
}
int jc(int a)
{int x; long y=1;
if(a==0) return y;
else for(x=1;x<=a;x++)
y*=x;
return y;
}
关键是对我写的这个程序该怎么改一下呢?
多谢大家了
展开
 我来答
zhd_12231
推荐于2016-01-16 · 超过14用户采纳过TA的回答
知道答主
回答量:36
采纳率:0%
帮助的人:0
展开全部
#include<stdio.h>
#include<math.h>
int zhd(long);
long fac(int);

void main()
{
int n,a=0;
long i;

printf("input 'n':");
scanf("%d",&n);

for(i=pow(10,(n-1));i<pow(10,n);i++)
if(zhd(i))
{
printf("%ld\n",i);
a=1;
}
if(!a)
printf("No output\n");

}

int zhd(long n)
{
int i;
long s=0,m=n;

do{
i=m%10;
s+=fac(i);
m/=10;
}while(m);

if(n==s)return 1;
return 0;
}
long fac(int n)
{
long s;

if(!n)s=1;
else s=n*fac(n-1);

return s;
}
/*下面是我帮你改正的(错误有以下几点):
1,main函数前要有说明;
2,定义函数,且此函数在main函数之后,则要在main函数之前做说明;
3,if等语句后有多个语句是要用大括号;
4,类型不符合的作一下强制说明比较好。
*/
#include <stdio.h>
#include <math.h>
int jc(int a);
void main()
{
int n,i,j,k=0,m,a=0,b=0;
scanf("%d",&n);
for(i=(int)pow(10,n-1);i<(int)pow(10,n);i++)
{
for(j=1,k=0;j<=n;j++)
{m=(int)pow(10,j-1);

a=i/m%10;
k+=jc(a);
a=0;}
if(k==i){
printf("%d\n",i);
b++; }
}
if(b==0) printf("No output\n");
}
int jc(int a)
{int x; long y=1;
if(a==0) return y;
else for(x=1;x<=a;x++)
y*=x;
return y;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fbfbfbx
2007-05-25 · TA获得超过152个赞
知道小有建树答主
回答量:716
采纳率:0%
帮助的人:397万
展开全部
for(j=1;k=0,j<=n;j++)
这句造成循环失效
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zx198799
2007-05-25 · TA获得超过1225个赞
知道小有建树答主
回答量:509
采纳率:100%
帮助的人:280万
展开全部
#include <stdio.h>
#include <math.h>
int jc(int a)
{int x;
int y=1;
if(a==0) return y;
else for(x=1;x<=a;x++)
y*=x;
return y;
}

void main()
{
int n,j,a=0,k=0,b=0;
double i,m;
scanf("%d",&n);
for(i=pow(10,n-1);k=0,i<pow(10,n);i++)
{
for(j=1;j<=n;j++)
{m=pow(10.,int(j-1));
a=int(i/m)%10;
k+=jc(a);
}
if(k==int(i)) {
printf("%d\n",k);
b++;
}
}
if(b==0) printf("No output\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
dielsalder
2007-05-25 · TA获得超过3854个赞
知道大有可为答主
回答量:1864
采纳率:50%
帮助的人:2748万
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
const int values[10] = {1, 1, 2, 6, 24, 120, 720,
5040, 40320, 362880};

int getsum(char* ch, int len)
{
int i = 0, sum = 0;
while(i < len)
{
sum += values[ch[i] - '0'];
i++;
}
return sum;
}
int main(void)
{
int n, low, high, i;
int isOK = 0;
char* pch = 0;
scanf("%d",&n);
low = (int)pow(10, n - 1);
high = 10 * low;
pch = (char*)malloc(n);
for(i = low; i < high; i++)
{
sprintf(pch,"%d",i);
if(getsum(pch, n) == i)
{
isOK = 1;
printf("%s\n",pch);
}
}
if(!isOK)
printf("No output\n");
free(pch);
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式