注册 登录
编程论坛 C语言论坛

刚刚学习c语言,一道水仙花数的题目不知错在哪里,希望能有大神帮忙指正

sherlock_zbh 发布于 2022-08-10 21:32, 1966 次点击
    int n;
    n = 3;
    int first = 1;
    int num = 1;
    for(; first <n; first++){
        num *= 10;
    }
    for(num; num <num*10; num++){
        int sum = 0;
        int j = 1;
        do{
            int num2 = num%10;
            int t = num2;
            num /= 10;
            while(j < n){
                t *= num2;
                j++;
            }
            sum += t;
            if(sum == num){
                printf("%d\n",num);
            }
        }while(num > 0);




    }
6 回复
#2
md000000002022-08-11 01:19
我觉得这样的写法有点绕,不过如果是训练思维能力的话,我建议了解下C++变量的作用范围

以下为仿造这种绕的写法写的代码

程序代码:
int main (int argc, char* argv[]) {
    for (int _num = 100; _num < 1000; _num++) {
        int num = _num;
        int sum = 0;

        do {
            int num_last = num % 10; // 最后一位
            int num_last_pow_3  = num_last; // 保存三次方结果的变量
            int product_counter = 1; // 三次方计数器
            while (product_counter < 3) {
                num_last_pow_3 *= num_last;
                product_counter++;
            }
            sum += num_last_pow_3;

            num /= 10;
        } while (num > 0);
        
        if (sum == _num) {
            printf ("%d\n", _num);
        }
    }
    return 0;
}


编译好的文件:
只有本站会员才能查看附件,请 登录
#3
hellobird2022-08-11 09:12
/* return true if daffodil number else false */
bool  is_daffodil_number(int num)
{
    if (num < 100 || num > 999) return false;
    int  d    = num % 10;
    int d10   = num / 10 % 10;
    int d100  = num / 10;
    return (d * d * d) + (d10 * d10 * d10) + (d100 * d100 * d100) == num;
}
#4
不会游泳的虾2022-08-11 10:16
修改如下,供参考:
程序代码:
#include <stdio.h>
int main()
{
    int n, first, num, tnum, i, t, num2;
    n = 3;
    //scanf("%d", &n);
    for (first = 1, num = 1; first < n; first++) {
        num *= 10;
    }
    for (i = num; i < num * 10; i++) {
        int sum = 0;
        tnum = i;
        int j = 1;
        do {
            num2 = tnum % 10;
            t = num2;
            while (j < n) {
                t *= num2;
                j++;
            }
            j = 1;
            sum += t;
        } while (tnum /= 10);
        if (sum == i) {
            printf("%d \n", i);
        }
    }

}
#5
sherlock_zbh2022-08-12 01:02
回复 4楼 不会游泳的虾
非常感谢
#6
sherlock_zbh2022-08-12 01:09
回复 2楼 md00000000
非常感谢
#7
sherlock_zbh2022-08-12 11:39
回复 3楼 hellobird
非常感谢
1