水仙花算法
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;
}
最近一直想用栈、数组、指针写另外一个算法出来,但是最近一直都没实践啊!
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;
}
最近一直想用栈、数组、指针写另外一个算法出来,但是最近一直都没实践啊!
相关文章推荐
- 算法训练 水仙花
- 21位自幂数( 水仙花)数 算法
- 蓝桥杯 ALGO-126 算法训练 水仙花
- 算法之水仙花
- 蓝桥杯 ALGO-126 算法训练 水仙花
- 【算法-3】求100—999之间的水仙花数
- 蓝桥杯 算法训练 水仙花
- 水仙花数字的通用算法(可计算21,34,甚至39位的水仙花数)
- 蓝桥杯 ALGO-126 算法训练 水仙花
- 经典算法-“水仙花”3位数的个位,十位,百位的立方和等于原来的数字
- Java算法之水仙花数
- 【求水仙花数】的算法实现
- 「算法」水仙花 java_网易
- 算法训练 水仙花
- 算法训练 水仙花
- Python中水仙花算法的计算
- 水仙花数算法--java
- 算法训练 水仙花
- 趣味算法-水仙花数
- java 计算 水仙花 花朵数 算法 优化