jsアルゴリズムセット(一)水仙数と拡張(自己累乗数の判断)

10594 ワード

jsアルゴリズム集合(一)
 

                最近一部の友達がjsの中のアルゴリズムに迷っています.このアルゴリズムは一体どういうことなのか分かりますが、コードで書いてはいけません.ここでは水仙の計算方法の考え方を共有して、自分のべき数まで拡張して計算します.
   
   
  
1、水仙の数かどうかを検証する.
①水仙の数の計算方法を書くには、まず何が水仙の数ですか?水仙の数は3桁の正の整数を指しています.その数字は各桁の3乗の和はそれ自体に等しいです.(例:1^3+5^3+3=153)
②水仙数とは何かを知ったら、どうやって手を下したらいいか分析し始めます.定義を通して、まず一桁ずつ取り出して、等式が成立するかどうかを検証して、水仙の数を探します.
③三桁の一桁をどのように取りに行きますか?簡単です.やはり153を例に挙げます.153%10は一位を取って一つの位を取ります.そして153%100を取って、10を除いて10位を取ります.153/100は百桁を取ります.
④三桁を取ったらどう判断しますか?if判断文で1^3+3+3^3=153が成立しているかを判断し、プリントアウトを成立します.まず水仙の数を判断するコードを書きます.
      
 1         while (true){
 2         var num=Number(prompt('        '));
 3          if(num<1000&num>=100){
 4             var a=num%10;                  //   
 5             var b=parseInt(num%100/10);    //   
 6             var c=parseInt(num/100);       //   
 7             }else {
 8              alert('    ;');
 9              continue;
10          }
11             if(num==a*a*a+b*b*b+c*c*c){
12                 alert(num+"     ");
13                 break;
14             }else {
15                 alert(num+"       ");
16                 break;
17             }
18         }
2、すべてのスイセンの数をプリントアウトします.
①一つの数が水仙の数かどうかを判断するにはどうやってすべての水仙の数をプリントしたらいいですか?最初に考えたのはきっと循環です.
②水仙の数は一桁の三桁ですから、三桁の数字を全部判断すればいいです.話は多くなくて、コードを見ます.
    
1  document.write('     :')
2          for(var num=100;num<1000;num++){
3             var a=num%10;                  //   
4             var b=parseInt(num%100/10);    //   
5             var c=parseInt(num/100);       //   
6             if(num==a*a*a+b*b*b+c*c*c){
7                document.write(num+',')
8             }
9         }
 3、自己累乗数のアルゴリズム、私達は水仙数を開拓して、自己累乗数のアルゴリズムを作ります.
①まず、何が自己累乗数であるかを確認します.自己累乗数はnビット正の整数(n≧3)を指します.その各ビットの数字のn乗の和はそれ自体に等しいです.(例:1^3+5^3+3=153)
②水仙の数はべき乗数の一部にすぎず、水仙の数から広がり、一つの数が自己累乗数であるかどうかを判断し、まず数桁であるかを判断します.
③次に数の各ビットを取って判断します.1634を例にして、具体的にはコードコメントを見てください.
 1    while (true) {
 2             var num = Number(prompt('       100  '));
 3             if (num >= 100 && parseFloat(num) == parseInt(num)) {
 4                 var i = 100;
 5                 var count = 0, sum = 0, a;
 6                 /*  num    */
 7                 while (true) {
 8                     if (num / i >= 1) {
 9                         i *= 10;
10                         count++;      //count = 1; , 3  ,2     ;    1634  :count=2
11                     } else {
12                         i /= 10;         //     num13                         break;
14                     }
15                 }
             /* */
16 while (i >= 1) { 17 var b = 1; 18 a = parseInt(num % (i * 10) / i); // num , 1634/1000 ; :1634%1000/100 :1634%100/10 1634%10;
                                     // 1634%(i*10)/i ; ,1634%10000=1634;1634%10/1; 19 for (var j = 1; j <= count + 2; j++) { 20 b *= a; // 21 } 22 sum += b; // 23 i/=10; // 24 }
             /* */
25 if (num == sum) { 26 alert(num + " "); 27 break; 28 } else { 29 alert(num + " "); 30 break; 31 } 32 } else { 33 alert(' ;'); 34 continue; 35 } 36 }
   
 今回はここまでです.
   ありがとうございます.   
 
いいと思いますが、いいですね.
 
みなさんに啓発してほしいです.
もっといい方法や意見がありましたら、メッセージエリアで私と話してください.