写一个函数,判断某一个四位数是不是玫瑰花数(所谓玫瑰花数即该四位数各位数字的四次方和恰好等于该数本身,如: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;
}
我觉得我的思路很正确,但是输出结果很离谱
首先是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;
}