c++ 水仙花数 有关于do while循环的问题

img

img


想知道为什么 num++ 在 if 上面时输出不了
而 num++ 在 if 下面时可以输出
(本人信科专业 大一 b站上自学c++ 目前学到do while循环)
谢谢大家的不吝赐教

望采纳,求求了

#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
  int a=100,s,d,f;
  for(a=100;a<1000;a++)
{
    s=a%10;//求出个位
    d=(a/10)%10;//求出十位
    f=a/100;//求出百位
 
    if(a==s*s*s+d*d*d+f*f*f)
    cout<<a<<" ";
  }
  cout<<endl;
 
    return 0;
}

该回答内容部分引用GPT,GPT_Pro更好的解决问题
num++ 在循环体站上面时,每次循环num的值会先自增,再进行判断,如果此时的值不满足循环条件则直接跳出,所以答不出水仙花数。 而num++在站下面时,即先进行判断,如果满足条件再进行自增,所以可以答出水仙花数。对于do while循环来说,只要有一次循环体能够执行(即满足循环条件),就能够实现结果的输出。

下面是实现水仙花数的代码:

#include <iostream>
using namespace std;
int main()
{
    int i, j, k, num;
    for (i=1; i<=9; i++)  {
        for (j=0; j<=9; j++)  {
            for (k=0; k<=9; k++)  {
                num = i*100 + j*10 + k;
                if (i*i*i + j*j*j + k*k*k == num)   {
                    cout << num << endl;
                }
            }
        }
    }
    return 0;
}

如果回答有帮助,望采纳。

因为num++之后,num的值会+1,而a,b,c是从原来的num值中分离出来的各个位上的数,判断条件就变成了:
一个数为N,N的百位^3 + N的十位^3 + N的个位^3 = N+1,这样的N值没有解。

num++在if上面时,因为num++是一个赋值操作,它会先将num的值加1,然后再将加1后的值赋给num,而if语句只会检查num的值,而不会改变num的值,所以num++在if上面时,num的值不会发生变化,所以输出不了。而num++在if下面时,num的值会先发生变化,然后if语句再检查num的值,所以可以输出。

不知道你这个问题是否已经解决, 如果还没有解决的话:

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