求解一道C++编程题

编写程序,求“水仙花数”。所谓“水仙花数”是这样的三位数,其各位数字的立方和等于该数本身,例如153.我试写了一段程序,可是总得不出正确结果,烦请高手指点!
以下是我写的程序代码:
#include <iostream>
using namespace std;
int main()
{int num;
int c=num%10; //个位数//
int b=(num%100-c)/10; //十位数//
int a=(num-10*b-c)/100; //百位数//
for(num=100;num<1000;num++) if(num==a^3+b^3+c^3) cout<<num<<'\t';
return 0;}
这么说,是我定义a、b、c的位置出了问题。哪位大侠能说得更清楚一些,定义a,b,c为什么不能放在for语句之前?另外谢谢7位热心的朋友!

你事先定义了num,然后a,b,c就已经定下来了,而且没有给num赋初值,这样的话,num的值就不是你说了算的了。

你的程序运行流程是这样的:

定义一个数叫num,值是随机数;(方便起见我们认为它是123)

它的个位数是c=3;十位数是b=2,百位数是a=1;

num从100开始试,如果等于a^3+b^3+c^3=1+8+27=36就输出。

显然这和“水仙花数”的定义是违背的。原因在于abc都被你早就定下来了,后面num变了,你的abc也应该变。

修改方法是把求个十百的三句写在循环体里面就对了。

关于问题补充:很简单,程序运行有先后,你先定义了abc并赋了值,后面并没有更改过abc的值,自然程序会认为abc是固定的。由于num是变的,所以对于每一个num,都必须算一遍它的abc,所以abc应该放在循环体里,每更新一个num,就要算一下num的个十百分别是多少,然后再验证它是不是符合条件。这是思路,你的那个思路是完全不对的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-02-28
修改如下:

//---------------------------------------------------------------------------

#include <iostream>
using namespace std;
int main()
{int num;
for (num=100; num<1000; ++num) {
int c=num%10;
int b=(num%100-c)/10;
int a=(num-10*b-c)/100;
if(num==a*a*a+b*b*b+c*c*c) cout<<num<<'\t';
}
return 0;
}
//---------------------------------------------------------------------------
第2个回答  2010-02-28
#include <iostream>
using namespace std;
int main()
{int num;
int a,b,c;
for(num=100;num<1000;num++)
{
a=int(num/100);
c=num%10;
b=int(num%100/10);
if(num==a*a*a+b*b*b+c*c*c)
{
cout<<num<<endl;
}
}
return 0;
}
第3个回答  2010-02-28
int c=num%10;
int b=num/10%10;
int a=num/100;

if (num==a*a*a+b*b*b+c*c*c) cout<<num<<'\t';
第4个回答  2010-02-28
#include<iostream>
using namespace std;
int main()
{
for(int num=100;num<1000;num++)
{
int c=num%10;
int b=(num%100-c)/10;
int a=num/100;
if(a*a*a+b*b*b+c*c*c==num)
cout<<num<<endl;
}
return 0;
}
第5个回答  2010-02-28
我想告诉你的是,在c++语言中,^不表示乘方,这是在vb语言中使用的。在c++语言中,如果要表示连乘,就只能连续写出来,例如如果是2的3次方,就只能写成2*2*2的形式,否则编译器识别不出来。
相似回答