C语言水仙花数的题目,flower是输入的数字,为什么我这个程序输出各位的数字的个位总是多1或者2?

2025-04-17 02:18:43
推荐回答(1个)
回答1:

/**
 *功能:无尽的水仙花数
 *编译器:mingw g++ 6.3
 *@fencaide 
 */

#include
#include

#define M_P 10

int Pow(int sub, int n){
    int sum = 1;
    if(n == 0)
        return 1;
    for(int m =0 ; m < n ; m++){
        sum *= sub;
    }
    return sum;
}
int isFlower(int num){
    int pieces = 0;
    int a[M_P] = { 0 };
    while(1){
        int p = Pow(10, pieces + 1);
        int mod = num % p;
        if(p/10 > num)
            break;
        else{
            a[pieces+1] = mod/Pow(10, pieces);
        }
        pieces++;
    }
    int sum = 0;
    for(int i =1; i <= pieces; i++){
        sum += Pow(a[i], pieces);
    }
    if(num == sum)
        return 1;
    else 
        return 0;
}

int main(void)
{
    int max = 0;
    printf("please input max range of numbers:");
    scanf("%d",&max);

    for(int i = 1 ; i < max ; i++){
        if(isFlower(i)){
            printf("%d is a flower number!\n",i);
        }
    }
    getchar();
    getchar();
    return 0;
}