水仙花数Word文件下载.docx
《水仙花数Word文件下载.docx》由会员分享,可在线阅读,更多相关《水仙花数Word文件下载.docx(20页珍藏版)》请在冰豆网上搜索。
4210818
1741725
9926315
8:
24678050
24678051
88593477
9:
146511208
912985153
472335975
534494836
10:
4679307774
11:
32164049650
40028394225
42678290603
49388550606
32164049651
94204591914
44708635679
82693916578
14:
28116440335967
16:
4338281769391370
4338281769391371
17:
35875699062250035
21897142587612075
19:
3289582984443187032
4929273885928088826
4498128791164624869
20:
63105425988599693916
21:
449177399146038697307
128468643043731391252
23:
27907865009977052567814
35452590104031691935943
27879694893054074471405
21887696841122916288858
24:
174088005938065293023722
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('
is_numeric($places)?
$places:
3);
if(PLACES>
=3){
$min=pow(10,PLACES-1);
//选数范围起始位置
$max=pow(10,PLACES);
//选数范围结束位置
//开始选数
for($i=$min,$out='
'
$max;
$sum=0;
//当前选数下各个幂值的和
$arr=str_split($i);
//以字符串方式分割选数
for($j=0;
$j<
PLACES;
$j++){//对每个数字作幂操作并累加
$sum+=pow($arr[$j],PLACES);
if($sum>
$i){//如果当前累加已大于选数,则跳出循环
break;
if($sum==$i){//如果符合定义,将该数字添加到输出队列
$out.=$i.'
<
br/>
//输出队列
echo$out;
//echo"
"
.(microtime()-$begin);
//输出脚本耗时,当脚本开始时间开启时有效
else{
//$this->
error('
错误的位数'
);
//提示错误的位数
C语言的"
水仙花数"
实现代码:
#include<
stdio.h>
#include<
math.h>
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);
j<
=i;
j++){
p+=pow(s[j],i);
p=%d,i=%d\n"
p,i);
if(p==q){
%d为水仙花数"
q);
}else{
%d该数不是水仙花数"
PASCAL实现代码:
programshuixianhuashu;
var
a,b,c:
integer;
begin
fora:
=1to9do
forb:
=0to9do
forc:
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:
=100to999dobegin
b:
=amod10;
c:
=amod100div10;
d:
=adiv100;
ifb*b*b+c*c*c+d*d*d=athenwriteln(a);
end;
或
programabcd;
a,b,c,i,t:
i:
=100;
repeat
a:
=trunc(i/100);
=trunc(i/10)-a*10;
=i-trunc(i/10)*10;
t:
=a*a*a+b*b*b+c*c*c;
ifi=t
thenwriteln(i,'
='
a,'
^3+'
b,'
c,'
^3'
=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++编译器上的水仙花数实现代码
iostream>
usingnamespacestd;
intmain()
{inta,q,w,e;
for(a=100;
a<
++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<
是水仙花数"
endl;
};
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<
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(