输出n位数全部的水仙花数
#include
int main(void)
{
int n,min,max,k,i,bit,temp,sum=0;
printf("Enter n(2);/*输入n*/
scanf("%d",&n);
min=pow(10,n);/*下限,比如n==3,min=100*/
max=pow(10,n+1);/*上限限,比如n==3,max=1000*/
for(i=min;i/*穷举min~max中的数*/
{
for(k=1;k<=n;k++)/*判断水仙花数*/
{
temp=i;
bit=i%10;
i=i/10;
sum=sum+pow(bit,n);
}
if(sum==i)
{
printf("%d ",i);
}
}
return 0;
}
1、内循环上增加 sum = 0; temp = i;
2、内循环内部只需要 sum += pow(temp % 10, n); temp /= 10;
代码参考:
#include<stdio.h>
#include<math.h>
int main(void) {
int n, min, max, t, sum;
printf("Enter n(2<n<8):");
scanf("%d", &n);
min = pow(10, n - 1);
max = pow(10, n);
for (int i = min; i < max; i++) {
t = i;
sum = 0;
for (int j = 1; j <= n; j++) {
sum += pow(t % 10, n);
t /= 10;
}
if (sum == i) {
printf("%d\n", i);
}
}
return 0;
}
10和11行之间插入sum = 0;