水仙花数是指一个N位正整数(N>=3),它的每个位上的数字的N次幂之和等于它本身。例如:153 = 13 + 53+ 33。本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3<=N<=7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
版权声明:本文为CSDN博主「coderstory」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fjinhao/article/details/46853171
我用C语言编写了一个程序,以下是我的代码:
#include
int main()
{
int n;
scanf("%d",&n);
int j=n;
int i;
int k=0;
int a=1;
do{
a*=10;
n--;
}while(n>1);
int b=a*10-1;
int c=a;
// printf("%d",c);
int d=0;
int m;
for(a=c;a<=b;a++){
// a=371为什么不行 ?
int l=a;
do{
d=l%10;
int o=d;
for(i=1;i
d*=o;
}
k+=d;
l/=10;
i=1;
}while(l>0);
if(k==a){
printf("%d\n",a);
}else{
k=0;
}
}
return 0;
}
我输入3的时候的结果只有3个,没有371,各位帮我看看
供参考:
#include<stdio.h>
#include<math.h>
int main()
{
int N, i, p, t, sum, n, m, k;
do {
scanf("%d", &N);
} while (N < 3 || N > 7); // 3<=N<=7
for (i = pow(10, N - 1), p = i * 10; i < p; i++) {
for (sum = 0, t = i; t > 0; t /= 10) {
m = N; k = 1;
n = t % 10;
while (m--)k *= n;
sum += k;
}
if (sum == i)
printf("%d\n", i);
}
return 0;
}
题主的代码修改如下,供参考:
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
int j = n;
int i;
int k = 0;
int a = 1;
do {
a *= 10;
n--;
} while (n > 1);
int b = a * 10 - 1;
int c = a;
//printf("%d", c);
int d = 0;
int m;
for (a = c; a <= b; a++) {
// a=371为什么不行 ?
int l = a;
do {
d = l % 10;
int o = d;
for (i = 1; i < j; i++)
d *= o;
k += d;
l /= 10;
//i = 1; 修改
} while (l > 0);
if (k == a) {
printf("%d\n", a);
}
//else { 修改
k = 0;
//} 修改
}
return 0;
}
这代码咋看啊?你自己看看你的问题内容呗
#include <iostream>
using namespace std;
int main()
{
int i,gw,sw,bw;
cout << "水仙花数为:" << endl;
for (i = 100; i < 1000; i++)
{
gw = i % 10; //求各位
sw = i / 10 % 10; //求十位
bw = i / 100; //求百位
if (gw * gw * gw + sw * sw * sw + bw * bw * bw == i)
{
cout << i << " ";
}
}
return 0;
}
你可以把我的这个当作参考