这个3-7位的水仙花,试了好几次,输出一直是1,到底哪里出现问题了,求解
{
int n;
scanf_s("%d", &n);
int a=1;
int b=1;
int sum = 0;
int h=0;
while (a < n) {
b = b * 10;
a++;
}
int t = b;
while (t < b * 10) {
for (h = 0; h < n;h++) {
int c = t / b;
t = t % b;
b /= 10;
int d = c;
int f = 1;4
while (f < n) {
int g = d * d;
f++;
if (f == n) {
sum = sum + g;
}
}
}
t++;
h = 0;
}
if (sum == t) {
printf("%d", t);
}
return 0;
315-317的高位取值是有缺陷的我改成低位取值了;
311行的判断应该在while里不然永远输出最后一个t;
下面按你的思路不知道你能否看懂。。。。。
#include<iostream>
using namespace std;
int main()
{
int n;
scanf_s("%d", &n);
int a = 1;
int b = 1;
int sum = 0;
int h = 0;
while (a < n) {
b = b * 10;
a++;
}
int t = b;
while (t < b * 10) {//100-1000
int e = t;//t另存防止后期使用误改循环出错
for (h = 0; h < n; h++) {//0-3/7
int c = e%10;//取个位(用最高位法在执行1001时中间“0”位数被自动消去)
e = e /10;//消除个位
int g = 1;
int f = 0;
while (f < n){//循环n次
g = g*c;//各个位数累乘n次
f++;
if (f == n){
sum = sum + g;
}
}
}
if (sum == t) {//判断在while中每次判断成立输出
printf("%d\n", t);
}
sum = 0;//置0并重新下一次循环。
int h = 0;
t++;
}
system("pause");
return 0;
}
323行,=改为==
代码贴出来看看
提供一个现成的,供参考:
#include<stdio.h>
#include<math.h>
int main()
{
int N, i, p, t, sum, n, m, k;
printf("输入位数(3<=n<=7):");
scanf("%d", &N);
i = (int)pow(10, N - 1);
p = (int)pow(10, N);
for (; 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;
}