#pragma warning(disable:4996)
#include<stdio.h>
#include <math.h>
int f1(int n, int m)
{
int l = 1, i;
for (i = 0; i < m; i++) {
l *= n;
}
return l;
}
int main()
{
int a=0,b=0,c=0,sum=0,d;
scanf("%d", &a);
for (b = f1(10, a - 1); b < f1(10, a); b++) {
d = b;
do {
c = b % 10;
b /= 10;
sum += f1(c, a);
} while (b > 0);
if (sum == d) {
printf("%d/n", b);
}
}
}
在循环中间加一个 printf(), 把 b, c, sum 都打印出来, 你就会发现循环不能结束的原因了
你代码里面,b是作为循环的变量,又在循环体里面对b进行运算,死循环了。你加个变量,用在循环里面运算,把两者分开
#include<stdio.h>
#include <math.h>
int f1(int n, int m)
{
int l = 1, i;
for (i = 0; i < m; i++) {
l *= n;
}
return l;
}
int main()
{
int a=0,b=0,c=0,sum=0,d;//b用来循环,d用来运算,分开不影响
scanf("%d", &a);
for (b = f1(10, a - 1); b < f1(10, a); b++) {
d = b;
sum = 0;//要清零,不然会加上上次的结果
do {
c = d % 10;
d /= 10;
sum += f1(c, a);
} while (d > 0);
if (sum == b) {
printf("%d\n", b);
}
}
}
多吐槽一句,请无视。。。。。。
很多人提问总喜欢写,“我的程序正确为什么多了几个数?”“程序没问题,为什么总有个值不对”类似的。拜托,你都看见结果有问题,还说程序没问题,程序明显就有BUG