读书人

关于一个求水仙花数的算法有关问题。求

发布时间: 2012-10-21 09:00:07 作者: rapoo

关于一个求水仙花数的算法问题。求指点。
问题:所谓“水仙花数”是指一个三位数,其各个位数字的立方和等于该数本身。例如,153=1*1*1+3*3*3+5*5*5,所以153是一个水仙花数。。。
我是这样算的:
#include<iostream.h>


void main()
{
int i;
for(i=100;i<1000;i++) //通过循环得到100~1000的三位数字
{
int a,b,c;
a=i%100;
a=a%10; //让a代表这个数字的个位
b=i%100;
b=b-a;
b=b/10; //让b代表这个数字的十位
c=i-10*b-a;
c=c/100; //让c代表这个数字的百位
if(i=a*a*a+b*b*b+c*c*c) //如果各位立方之和等于这个数
cout<<i<<"is a flower number\n"; //则输出这个数是水仙花数
}
}
理论上讲这样算好像没问题,让i从100自加到1000,完成对所有3位数的判断,如果各个位之和等于这个数,则输出这个数,但是实际运行的时候确不是这样的结果,实际得到的数字有“ 1,8,729,370,371,378,1099”。这样的结果明显已经跳出了i从100~1000的范围,但是i是从哪里开始被改变的?求高手解答,并予以正确的运算方法。


[解决办法]
if语句不对!应该为if(.....==....)if语句是用于判断的,你写成=就把后面的表达式的值赋给了i,i的值自然就会变得很怪异!下面是运行正确的程序:
#include<iostream>
using namespace std;
void main()
{
int i,a,b,c;
for(i=100;i<1000;i++)
{
a=i/100;
b=i-a*100;
b=b/10;
c=i-a*100-b*10;
if(i==a*a*a+b*b*b+c*c*c)
cout<<i<<" ";
}
cout<<"Is the flower nnumber"<<endl;
}
[解决办法]
以后可以这样写:
a*a*a+b*b*b+c*c*c==i;
这样出错就能发现了

读书人网 >C++

热点推荐