水仙花数
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; }
求取方法(非高精度)
以下为在各种编程语言中实现求取水仙花数的方法(非高精度)。
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"; } } ?>
水仙花数
水仙花
什么是水仙花数
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数, 他是这样定义的:水仙花数是指一个 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
} if($sum==$i){//如果符合定义,将该数字添加到输出队列 $out.=$i.'<br/>'; } } //输出队列 echo $out; //echo "<br/>".(microtime()-$begin); //输出脚本耗时,当脚本开 始时间开启时有效 } else{ //$this->error('错误的位数'); //提示错误的位数 } }
} if (p==q) { printf("%d 为水仙花数",q); }else { printf("%d 该数不是水仙花数",q); } }
PASCAL 实现代码:
program shuixianhuashu; var a,b,c:integer; begin for a:=1 to 9 do for =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. 或 program abcd; var a,b,c,i,t:integer; begin i:=100; repeat a:=trunc(i/100); b:=trunc(i/10)-a*10;
javascript +html 实现可变位数的运算:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
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 语言的"水仙花数"实现代码:
#include <stdio.h> #include<math.h> int main (void) { long n,p; long c,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);
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 位。
c:=i-trunc(i/10)*10; t:=a*a*a+b*b*b+c*c*c; if i=t then writeln(i,'=',a,'^3+',b,'^3+',c,'^3'); i:=i+1 until i>999 end. Visual Basic 的"水仙花数"实现代码:
FORTRAN 的"水仙花数"实现代码:
C# ASP.N 中的实现代码
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>"); } }
<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; }