水仙花数

王朝百科·作者佚名  2009-11-18  
宽屏版  字体:   |    |    |  超大  

水仙花数

水仙花数是指一个 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

17: 35641594208964132

19: 1517841543307505039

19: 3289582984443187032

19: 4929273885928088826

19: 4498128791164624869

20: 63105425988599693916

21: 449177399146038697307

21: 128468643043731391252

23: 27907865009977052567814

23: 35452590104031691935943

23: 27879694893054074471405

23: 28361281321319229463398

23: 21887696841122916288858

24: 174088005938065293023722

24: 239313664430041569350093

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 $x.'</br>';

}

}

?>

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

#include <stdio.h>

int main(void)

{

int a,b,c;

for(a=1;a<=9;a++)

for(b=0;b<=9;b++)

for(c=0;c<=9;c++)

if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)

printf("%d%d%d

",a,b,c);

return 0;

}

◆PASCAL实现代码:

program shuixianhuashu;

var

a,b,c:integer;

begin

for a:=1 to 9 do

for b:=0 to 9 do

for c:=0 to 9 do

if a*a*a+b*b*b+c*c*c=100*a+10*b+c then writeln(100*a+10*b+c);

end.

或:

program sxh;

var a,b,c,d:integer;

begin

for a:=100 to 999 do begin

b:=a mod 10;

c:=a mod 100 div 10;

d:=a div 100;

if b*b*b+c*c*c+d*d*d=a then writeln(a);

end;

end.

◆Visual Basic的"水仙花数"实现代码:

Private Sub Form_Click()

Dim a, b, c As Integer 'a(个)b(十)c(百)

For a = 0 To 9

For b = 0 To 9

For c = 1 To 9

If a ^ 3 + b ^ 3 + c ^ 3 = a + 10 * b + 100 * c Then

MsgBox 100 * c + 10 * b + a

End If

Next c

Next b

Next a

End Sub

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

WRITE(*,30)

DO 10 K=100,999

IA=K/100

IB=MOD(K,100)/10

IC=MOD(K,10)

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

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

10 CONTINUE

20 FORMAT(5X,4I4)

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

STOP

END

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

#include<iostream>

using namespace std;

int main()

{int a,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<<a<<"是水仙花数"<<endl;};

return 0;

}

◆pyhon中实现的代码

for i in range(1,10):

for j in range(0,10):

for k in range(0,10):

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

print i*100+j*10+k,

◆Java中实现的代码

public class shuixianhuashu {

public static void main(String[] args) {

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

int a = i/100;

int b = i/10%10;

int c = i%10;

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

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

}

}

}

◆C#ASP.NET中的实现代码

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

{

int bai = 0;

int shi = 0;

int ge = 0;

int baiyushu = 0;

bai = i / 100;

baiyushu = i % 100;

shi = baiyushu / 10;

ge = baiyushu % 10;

if (i == bai * bai * bai + shi * shi * shi + ge * ge * ge)

{

Response.Write("水仙花数:" + i + "<br>");

}

}

◆javascript +html实现水仙花可变位数的运算:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>无标题文档</title>

<script type="text/javascript">

function fun(){

//取得参量位数

var valnum=parseInt(document.frm.input.value);

//求得符合参量位数的最大值和最小值

var highnum=Math.pow(10,valnum)-1;

var lownum=Math.pow(10,valnum-1);

//输出队列的组成部分

var output="共有个数:",res_str="";

//a为i分解为数组的下脚值,num为符合规则的水仙花的个数

var a=0,num=0;

//遍历所有符合参量位数的数

for(i=lownum;i<=highnum;i++){

//res为水仙花数规则值,即n位的数的每位数的n次幂的和,预置为0

var res=0;

//分解出当前i的每位数并存如数组

var new_i=i.toString().split("");

for(a=0;a<=valnum-1;a++){

//求得水仙花数规则值

res=Math.pow(parseInt(new_i[a]),valnum)+res;

}

//判断符合水仙花数的个数,如符合则将水仙花数并入输出队列

if(res==i){

num++;

res_str=res_str+"<br>"+res;

}

}

//输出队列

if(valnum<3){output="你输入了无效位数!";}

else{output=output+num+res_str;}

//输出

document.getElementById("divnum").innerHTML=output;

}

</script>

</head>

<body><form name="frm">

<label>请输入水仙花的位数(N>=3):</label><input type="text" name="input" value="">

<input value="运算" type="button" onclick="fun()" />

</form>

<div id="divnum" style=" position:absolute;left:100px;width:200px;top:100px;"></div>

</body>

</html>

◆asp中实现的代码

<%

dim a,b,c,d,m,n,z

i=1

for i=100 to 999

a=mid(i,1,1)

b=mid(i,2,1)

c=mid(i,3,1)

d=a*a*a

m=b*b*b

n=c*c*c

z=d+m+n

if z=i then

response.write z & "<br>"

end if

next

%>

◆Visual FoxPro 中用表单实现的方法(此例只计算3位数水仙花数)

(1)创建表单Form1并添加文本框Text1与命令按钮Command1

(2)修改Command1的Caption属性为“计算并显示”

(3)为Form1添加方法sxh

(4)修改方法sxh代码如下

para x

x1=int(x%10)

x2=int(x/10)%10

x3=int(x/100)%100

if x=x1^3+x2^3+x3^3

return .t.

else

return .f.

endif

(5)为Command1的Click事件编写如下的事件代码:

thisform.currentx=thisform.width/2

thisform.currenty=thisform.height/2

thisform.print("水仙花数是:")

for m=100 to 999

thisform.text1.value=m

sure=thisform.sxh(m)

if sure=.t.

thisform.print(str(m,4)+space(3))

inkey(0.5)

endif

for 延迟=1 to 20000

yiru=2008610029

endfor

endfor

this.enabled=.f.

QBASIC水仙花数1—999999之间

For i = 1 To 999999

a = Mid(i, 1, 1)

b = Mid(i, 2, 1)

c = Mid(i, 3, 1)

d = Mid(i, 4, 1)

If i = a ^ 4 + b ^ 4 + c ^ 4 + d ^ 4 Then Print i;

Next i

PB 实现的方法(此例只计算3位数水仙花数)

int s,a,b,c

for s=100 to 999

a=integer(s/100)

b=integer((s - a*100)/10)

c=s - integer(s/10)*10

if s=a^3+b^3+c^3 then

messagebox("",s)

end if

next

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝百科 版权所有