一个简单的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;
}
关键是对我写的这个程序该怎么改一下呢?
多谢大家了 展开
输入: 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;
}
关键是对我写的这个程序该怎么改一下呢?
多谢大家了 展开
4个回答
展开全部
#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;
}
#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;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for(j=1;k=0,j<=n;j++)
这句造成循环失效
这句造成循环失效
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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");
}
#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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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;
}
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询