输出结果不符合我的预想,但是不知道为什么错,本人觉得很正确

写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身,如:1634=14+64+34+44)。在主函数中调用该函数,判断出所有的玫瑰花数。
#include
#include <math.h>
using namespace std;
int fun(int num);
int main() {
int num,s;
for(num=1000;num<=9999;num++)
{s=fun(num);
cout<<s<<" ";}
return 0;
}

int fun(int num)

{
int a,b,c,d;

 a=num/1000;
 b=num%1000/100;
 c=num%100/10;
 d=num%10;
 if(num==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
    return num;

}
我觉得我的思路很正确,但是输出结果很离谱

img

![img](

首先是fun函数的返回值问题,如果判断的数不是玫瑰花数,你返回什麽?根本没写return语句
s=fun(num);
cout<<s<<" ";
你得判断一下fun的返回值再输出吧?不然每个数你都输出,还知道哪个是玫瑰花数呢

你的函数的返回值不完全,而且应该判断返回值是否等于原来的值。代码修改如下:

#include <iostream>
#include <math.h>
using namespace std;
int fun(int num);
int main() {
    int num,s;
    for(num=1000;num<=9999;num++)
    {
        s=fun(num);
        if(s == num)
        cout<<s<<" ";
    }
    return 0;
}

int fun(int num)
{
    int a,b,c,d;

    a=num/1000;
    b=num%1000/100;
    c=num%100/10;
    d=num%10;
    if(num==a*a*a*a+b*b*b*b+c*c*c*c+d*d*d*d)
        return num;
    return 0;
}