为啥c++中用do while秋水仙花数不可以这样写if中的条件

img

num==100a+10b+c这样的方式为什么不对各位小伙伴解答一下

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    问题的关键在于了解C++中的数据类型和运算规则。在C++中,做乘法运算时,运算符*两侧的操作数必须是数字类型。而在条件 num == 100a + 10b + c 中,a、b、c是变量,不是数字类型,所以会导致编译错误。

    为了解决这个问题,你可以将条件 num == 100a + 10b + c 改写为 num == (100 * a) + (10 * b) + c。这样,a、b、c就不再是变量了,而是数字类型的操作数,可以进行乘法运算。

    下面是代码示例:

    #include<iostream>
    using namespace std;
    
    int main() {
        // 1. 打印所有三位数
        int num = 100;
        do {
            // 2. 判断水仙花数
            int a = 0, b = 0, c = 0;  // 代表个位、十位、百位
    
            a = num % 10;  // 获取个位
            b = num / 10 % 10;  // 获取十位
            c = num / 100 % 10;  // 获取百位
    
            if (a * a * a + b * b * b + c * c * c == num) {
                cout << num << endl;
            }
            num++;
        } while (num < 1000);
    
        system("pause");
    
        return 0;
    }
    

    运行以上代码,就可以输出所有的水仙花数。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

水仙花判断条件不对
应该是
if (num == a * a *a + b * b * b + c * c * c)
...

num == a * a * a + b * b * b + c * c * c

水仙花数是n = a^3+b^3+c^3,写成代码就是num == a*a*a + b*b*b + c*c*c。