标题:刚刚学习c语言,一道水仙花数的题目不知错在哪里,希望能有大神帮忙指正
只看楼主
sherlock_zbh
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-8-10
结帖率:100%
已结贴  问题点数:20 回复次数:6 
刚刚学习c语言,一道水仙花数的题目不知错在哪里,希望能有大神帮忙指正
    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);




    }
搜索更多相关主题的帖子: sum int 学习 num c语言 
2022-08-10 21:32
md00000000
Rank: 4
等 级:业余侠客
威 望:7
帖 子:105
专家分:289
注 册:2017-6-22
得分:7 
我觉得这样的写法有点绕,不过如果是训练思维能力的话,我建议了解下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;
}


编译好的文件:
compiled.rar (13.77 KB)
2022-08-11 01:19
hellobird
Rank: 2
等 级:论坛游民
威 望:3
帖 子:14
专家分:47
注 册:2017-4-17
得分:7 
/* 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;
}
2022-08-11 09:12
不会游泳的虾
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:101
专家分:643
注 册:2021-7-1
得分:7 
修改如下,供参考:
程序代码:
#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);
        }
    }

}
2022-08-11 10:16
sherlock_zbh
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-8-10
得分:0 
回复 4楼 不会游泳的虾
非常感谢
2022-08-12 01:02
sherlock_zbh
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-8-10
得分:0 
回复 2楼 md00000000
非常感谢
2022-08-12 01:09
sherlock_zbh
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2022-8-10
得分:0 
回复 3楼 hellobird
非常感谢
2022-08-12 11:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509758-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.472221 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved