水仙花算法

#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;  
  } 

最近一直想用栈、数组、指针写另外一个算法出来,但是最近一直都没实践啊!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值