2017-07-03 8 views
0

命令: "モジュロ"と呼ばれる関数を記述してください。 2つの数字が与えられた場合、「モジュロ」はnum1をnum2で除算した後の余りを返します。モジュラスなしの2つの数値の残りの検索

これまでのコードです。それをrepl.itで実行すると正しい残りの部分が得られますが、プログラムを提出すると、無限ループに入り、なぜか手がかりになりません。私は、forループの戻り関数が自動的に終了すると考えています。どんな助けでも感謝します、ありがとう。基本的には、数値1に達するか、それ以上になるまで常にnumber2を追加しています。それが上がると、私は一度2を減算し、その差を見つけます。

function modulo(num1, num2) { 
    if(num1 === 0) { 
     return 0; 
    } 
    if(num2 === 0) { 
     return NaN; 
    } 
    if(isNaN(num1) === true || isNaN(num2) === true) { 
     return NaN; 
    } 

    var i = 0; 

    for(i = 0; i <= num1;) { 
     i += num2; 
     if(i === num1) { 
     return 0; 
     } 
     else if(i > num1) { 
     i = i - num2; 
     console.log(i, num1); 
     return num1 - i; 
     } 
    } 
} 

var output = modulo(25, 4); 
console.log(output); 
+0

を動作するはずです? – jswebb

+0

申し訳ありませんrepl.itを使用しているJavaScriptの準備サイトですSubmitは、プログラムが正しく動作することを確認するための多数のテストを使用します。したがって、負の数と0をテストし、NaNはモジュラスが正しいことを確認します。 – ameet01

+0

あなたが私に尋ねる気にならないなら、どんなウェブサイトですか?それは私のコンソールで関数をうまく呼び出すので、奇妙です。また、コードをクリーンアップする方法のいくつかの簡単なヒントについては、私の答えを参照してください。 :) – jswebb

答えて

0

無限ループがどこに表示されているかは完全にはわかりません。あなたのコードをコンソールに接続して、関数をうまく呼び出すことができます。検証するためにどのサイトを使用していますか?

また、あなたの運動のあまりを変更せずに、私はあなたが読みやすさを向上させるには、コードを統合することができ、小さなエリアのカップルを指摘したいと思います:

if(num2 === 0) { 
     return NaN; 
    } 

    if(isNaN(num1) === true || isNaN(num2) === true) { 
     return NaN; 
    } 

にダウン蒸留することができます
if (num2 === 0 || isNaN(num1) || isNaN(num2)) { 
     return NaN; 
    } 

JavaScriptはブール値が実際の値を持つものがすべて真であるとみなされるため、つまりisNaN(num1)isNaN(num2)がデフォルトで「true」になるためです。

また、すべての代入演算子を使用できます。それは完全にオプションですが、あなたが1つ(i += num2;)を使用して以来、私はあなたがもう1つコードを使って(i -= num2;)使えることを指摘しました。

ハッピーコーディング! :)それは別のオプションかもしれない

0

function modulo(num1, num2) { 
 

 
    if(isNaN(num1) || isNaN(num2)) { 
 
     return NaN; 
 
    } 
 

 
    var strResult = (num1/num2).toString(); 
 
    
 
    var decimalPart = 
 
     parseFloat(strResult.substr(strResult.indexOf("."))); 
 
     
 
    var remainder = Math.round(decimalPart*num2); 
 
    return remainder; 
 
} 
 

 
console.log(modulo(77,9), (77%9)); // 5 
 
console.log(modulo(549,123), (549%123)); // 57 
 
console.log(modulo(33,6), (33%6)); // 3

+0

全く異なる実装では、OPが独自のバージョンで問題を抱えている理由は説明されていません。 – nnnnnn

+0

チェックの後、モジュラスは単に 'num-mod * Math.floor(num/mod)'です。しかし、私はそれがOPに役立つとは思わない。 – RobG

0
function modulo(num1, num2) { var div = num1/num2; 
var remainder = div - Math.floor(div); // gives the decimal point value left out from the division 
return Math.round(remainder * num2); // multiplies the remainder with num2 and gives a whole number value 
} 

これはかなり簡単です、あなたは "プログラムを提出する" とはどういう意味ですか常に

関連する問題