您的位置:首页 > 其它

水仙花算法

2009-07-16 21:32 162 查看
#include <stdio.h>

int main(void)
{
int i,j,k;
for(i=1;i<10;i++)
{
for(j=0;j<10;j++)
{
for(k=0;k<10;k++)
{
if( (i*100+j*10+k)==((i*i*i)+(j*j*j)+(k*k*k)))
{
printf("%d%d%d ",i,j,k);
}
}
}
}
return 0;
}

感觉这个水仙花的算法写的不错。。百度转贴了。。

貌似有很多种方法,前阵子在谭浩强一本c++书看到另外一个~记得貌似他的还比较复杂,先/100,/10的一个把数一个个算出来。

貌似是这样:

#include<stdio.h>
main()
{int i,a,b,c;
for(i=100;i<=999;i++)
{a=i/100;
b=i/10-a*100;
c=i-b*10-a*100;
if(i==a*a*a+b*b*b+c*c*c)
printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d/n",i,a,a,a,b,b,b,c,c,c);
}
}

另外看到的一些算法“

main()
{ int i,a,b,c;
for(i=100;i<=999;i++)
{ a=i/100; b=(i%100)/10; c=i%10;
if(i==a*a*a+b*b*b+c*c*c)
printf("/n%d",i);
}
}

还在csdn上看到一哥们写的到N。。没测试

//程序: arm_number.cpp
//功能: 求水仙花数(是一个n(n>=3)位数字的数,它等于每位数字的n次幂的和)

#include<iostream.h>
#include<math.h>
#include<time.h>

//函数声明
int arm_number(int max); //此函数的功能是求小于max的所有水仙花数

int main()
{
int max,second;
time_t t;
cout<<"input the max number: ";
cin>>max;

second=time(&t);
arm_number(max);
second=time(&t)-second;
cout<<"The total times is:"<<second<<'/n';

return 0;
}

//函数定义
int arm_number(int max)
{
int num,radix=10,x,y,time=0;
for(num=100;num<=max;num++){ //从100到max逐个搜索符合条件的数

int n=0,power=1,total=0;
while(power<=num){
power=power*radix;
n++; //统计此数是几位数
time++;
}

while(power>=10){
x=(num%power)/(power/10); //从高位到低位逐位求值
y=n; //y为n次幂
total=total+int(pow(x,y)); //求每位数字的n次幂的和
power=power/10;
time++;
}
if(total==num) cout<<"The arm number is: "<<num<<'/n'; //如果此数符合水仙数则输出
}
cout<<"The times of computed is: "<<time<<'/n'; //统计计算机的运算次数
return 0;
}

最近一直想用栈、数组、指针写另外一个算法出来,但是最近一直都没实践啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: