c语言初学者,请问这段代码为什么可以运行但没有任何输出呢。同时代码若有不足希望指正。
代码如下
/*水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 1 + 125+ 27。本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行*/
#include
int main()
{
int N=0;
printf("输入一个数字:");
scanf("%d",&N);
int x=1;
int n=N;
for (;n>0;n=n-1)
{
x*=10;
}
n=N; //水仙花数小于x
int y=x/10; //大于y 且y为水仙花数的位数及最小值
int a;
int sum=1;
int T=0;
for (a=y;a
int c; //接下来定义b以取得a的不同位数 并进行N次方相加得T 判断是否与a相等
while (b>0)
{ c=b%10;
while (n>0)
{sum=sum*c;
n=n-1;
T=T+sum;
sum=1;
}
b=b/10;
}
if (T==a)
{
printf("%d\n",a);
}
a=a+1;
T=0;
n=N;
}
return 0;
}
题主代码修改如下,修改处见注释,供参考:
#include <stdio.h>
int main()
{
int N = 0;
printf("输入一个数字:");
scanf("%d", &N);
int x = 1;
int n = N;
for (; n > 0; n = n - 1)
{
x *= 10;
}
n = N; //水仙花数小于x
int y = x / 10; //大于y 且y为水仙花数的位数及最小值
int a;
int sum = 1;
int T = 0;
for (a = y; a < x;) //a要从最小的N位数开始加至最大的N位数
{
int b = a;
int c; //接下来定义b以取得a的不同位数 并进行N次方相加得T 判断是否与a相等
while (b > 0)
{
c = b % 10;
while (n > 0)
{
sum = sum * c;
n = n - 1;
}//修改
T = T + sum;
sum = 1;
n = N; //修改
//}修改
b = b / 10;
}
if (T == a)
{
printf("%d\n", a);
}
a = a + 1;
T = 0;
}
return 0;
}
正确代码如下,如有帮助请点击一下采纳谢谢:
#include <stdio.h>
#include <math.h>
int main()
{
int n,j,i;
double start,reigon;
scanf("%d",&n);
start=pow(10,n-1);
reigon=pow(10,n);
for(i=start;i<reigon;i++)
{
int sum=0,temp=i;
while(sum<=i&&temp!=0)
{
int mod=temp%10;
int k=1;
for(j=1;j<=n;j++)
k=k*mod;
sum=sum+k;
temp /=10;
}
if(sum==i)
printf("%d\n",i);
}
return 0;
}