水仙花数.docx

上传人:b****5 文档编号:2927023 上传时间:2022-11-16 格式:DOCX 页数:20 大小:40.05KB
下载 相关 举报
水仙花数.docx_第1页
第1页 / 共20页
水仙花数.docx_第2页
第2页 / 共20页
水仙花数.docx_第3页
第3页 / 共20页
水仙花数.docx_第4页
第4页 / 共20页
水仙花数.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

水仙花数.docx

《水仙花数.docx》由会员分享,可在线阅读,更多相关《水仙花数.docx(20页珍藏版)》请在冰豆网上搜索。

水仙花数.docx

水仙花数

水仙花数

水仙花

什么是水仙花数

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:

水仙花数是指一个n位数(n≥3),它的每个位上的数字的n次幂之和等于它本身。

(例如:

1^3+5^3+3^3=153)

常见水仙花数

三位的水仙花数共有4个:

153,370,371,407;

四位的水仙花数共有3个:

1634,8208,9474;

  五位的水仙花数共有3个:

54748,92727,93084;

  六位的水仙花数只有1个:

548834;

  七位的水仙花数共有4个:

1741725,4210818,9800817,9926315;

  八位的水仙花数共有3个:

24678050,24678051,88593477

  ……

  ……

  使用高精度计算,可以得到超过INT类型上限的水仙花数:

  5:

93084

  5:

92727

  5:

54748

  6:

548834

  7:

9800817

  7:

4210818

  7:

1741725

  7:

9926315

  8:

24678050

  8:

24678051

  8:

88593477

  9:

146511208

  9:

912985153

  9:

472335975

  9:

534494836

  10:

4679307774

  11:

32164049650

  11:

40028394225

  11:

42678290603

  11:

49388550606

  11:

32164049651

  11:

94204591914

  11:

44708635679

  11:

82693916578

  14:

28116440335967

  16:

4338281769391370

  16:

4338281769391371

  17:

35875699062250035

  17:

21897142587612075

  19:

3289582984443187032

  19:

4929273885928088826

  19:

4498128791164624869

  20:

63105425988599693916

  21:

449177399146038697307

  21:

128468643043731391252

  23:

27907865009977052567814

  23:

35452590104031691935943

  23:

27879694893054074471405

  23:

21887696841122916288858

  24:

174088005938065293023722

  24:

188451485447897896036875

  (为环保起见,24位以上的水仙花数略)

  理论上,最大的水仙花数不超过34位。

求取方法(非高精度)

  以下为在各种编程语言中实现求取水仙花数的方法(非高精度)。

PHP“水仙花数”实现代码:

  

php

  for($i=100;$i<1000;$i++){

  $a=intval($i/100);

  $b=intval($i/10)%10;

  $c=$i%10;

  if(pow($a,3)+pow($b,3)+pow($c,3)==$i){

  echo$i."\t";

  }

  }

  ?

>

PHP所有位数理论输出:

  /***水仙花数为不小于3位的数字,每位数字的N次幂的和等于该数字.N为该数字的位数

  *@namedaffodilsNum水仙花数

  *@param$places水仙花位数>=3

  */

  functiondaffodilsNum($places=3){

  //set_time_limit(0);//设置脚本超时为不限制,如果提示30秒超时,可以开启本控制

  //$begin=microtime();//脚本开始时间

  //定义位数

  if(!

defined('PLACES'))define('PLACES',is_numeric($places)?

$places:

3);

  if(PLACES>=3){

  $min=pow(10,PLACES-1);//选数范围起始位置

  $max=pow(10,PLACES);//选数范围结束位置

  //开始选数

  for($i=$min,$out='';$i<$max;$i++){

  $sum=0;//当前选数下各个幂值的和

  $arr=str_split($i);//以字符串方式分割选数

  for($j=0;$j

  $sum+=pow($arr[$j],PLACES);

  if($sum>$i){//如果当前累加已大于选数,则跳出循环

  break;

  }

  }

  if($sum==$i){//如果符合定义,将该数字添加到输出队列

  $out.=$i.'
';

  }

  }

  //输出队列

  echo$out;

  //echo"
".(microtime()-$begin);//输出脚本耗时,当脚本开始时间开启时有效

  }

  else{

  //$this->error('错误的位数');//提示错误的位数

  }

  }

C语言的"水仙花数"实现代码:

  #include

  #include

  intmain(void){

  longn,p;

  longc,a,j,s[30],i,q;

  p=0;

  a=10;

  scanf("%d",&n);

  q=n;

  for(i=1;c>10;++i){

  c=n/a;

  a=a*10;

  }printf("i=%d,a=%d\n",i,a);

  for(j=1;a>=10;++j){

  s[j]=n/(a/10);

  n=n-s[j]*(a/10);

  a=a/10;

  printf("j=%d,a=%d\n",j,a);

  }

  for(j=1;j<=i;j++){

  p+=pow(s[j],i);

  printf("p=%d,i=%d\n",p,i);

  }

  if(p==q){

  printf("%d为水仙花数",q);

  }else{

  printf("%d该数不是水仙花数",q);

  }

  }

PASCAL实现代码:

  programshuixianhuashu;

  var

  a,b,c:

integer;

  begin

  fora:

=1to9do

  forb:

=0to9do

  forc:

=0to9do

  ifa*a*a+b*b*b+c*c*c=100*a+10*b+cthenwriteln(100*a+10*b+c);

  end.

  或:

  programsxh;

  vara,b,c,d:

integer;

  begin

  fora:

=100to999dobegin

  b:

=amod10;

  c:

=amod100div10;

  d:

=adiv100;

  ifb*b*b+c*c*c+d*d*d=athenwriteln(a);

  end;

  end.

  或

  programabcd;

  var

  a,b,c,i,t:

integer;

  begin

  i:

=100;

  repeat

  a:

=trunc(i/100);

  b:

=trunc(i/10)-a*10;

  c:

=i-trunc(i/10)*10;

  t:

=a*a*a+b*b*b+c*c*c;

  ifi=t

  thenwriteln(i,'=',a,'^3+',b,'^3+',c,'^3');

  i:

=i+1

  untili>999

end.

VisualBasic的"水仙花数"实现代码:

FORTRAN的"水仙花数"实现代码:

  WRITE(*,30)

  DO10K=100,999

  IA=K/100

  IB=MOD(K,100)/10

  IC=MOD(K,10)

  IF(K.NE.IA**3+IB**3+IC**3)GOTO10

  WRITE(*,20)K,IA,IB,IC

  10CONTINUE

  20FORMAT(5X,4I4)

  30FORMAT(5X,18HN=I**3+J**3+K**3)

  STOP

  END

C++编译器上的水仙花数实现代码

  #include

  usingnamespacestd;

  intmain()

  {inta,q,w,e;

  for(a=100;a<1000;++a)

  {q=a/100;

  w=(a-q*100)/10;

  e=(a-q*100-w*10);

  if(a==q*q*q+w*w*w+e*e*e)

  cout<

  return0;

  }

pyhon中实现的代码

  foriinrange(1,10):

  forjinrange(0,10):

  forkinrange(0,10):

  ifi*100+j*10+k==i*i*i+j*j*j+k*k*k:

  printi*100+j*10+k

Java中实现的代码

  publicclassshuixianhuashu{

  publicstaticvoidmain(String[]args){

  for(inti=100;i<1000;i++){

  inta=i/100;

  intb=i/10%10;

  intc=i%10;

  if(Math.pow(a,3)+Math.pow(b,3)+Math.pow(c,3)==i)

  System.out.println(i+"是水仙花数");

  }

  }

  }

C#ASP.N中的实现代码

  for(inti=100;i<1000;i++)

  {

  intbai=0;

  intshi=0;

  intge=0;

  intbaiyushu=0;

  bai=i/100;

  baiyushu=i%100;

  shi=baiyushu/10;

  ge=baiyushu%10;

  if(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1