2017-10-18 23 views
0

我的目標是創建一個程序來檢查用戶輸入是否是完美數字。它對輸入的數字進行驗證。如果輸入是一個完美的數字,我想打印出每個除數。我嘗試使用這種方法:檢查完美的數字並打印出除數?

{ 
for(int number=2; number <= 10000 ; number++) 
    perfect(number); 
return 0; 
} 
void perfect(int number) 
{ 
    int total = 0; 
    for (int i = 1; i < number; i++) 
{ 
     if (number % i == 0) 
    total += i;   
} 
    if (number == total) 
{ 
    for (int x = 1; x < number; x++) 
    { 
     if (number % x == 0) 
      cout << x << " + "; 
    } 
    cout << " = " << number << endl; 
} 
} 

然而,我無法獲得預期的效果。我對JavaScript非常陌生,並且正努力以正確的方式插入代碼。有沒有人對我如何獲得預期效果提出建議?這裏是我已經寫代碼:

function check_prime() { 
var input = document.getElementById("enteredNumber").value; 
var number = parseInt(input); 

if (isNaN(number)) { 
alert("Oops! Please enter a valid number."); 
document.getElementById("enteredNumber").value=""; 
document.getElementById("result").innerHTML = ""; 
document.getElementById("enteredNumber").focus(); 

     } 

else if (input.length === 0) { 
alert("Please enter a number."); 
document.getElementById("enteredNumber").focus(); 

     } 

else if (!isNaN(number)) { 
      if (is_perfect(number)) { 
       document.getElementById("answer").innerHTML =  "Congratulations! " + number + " is a perfect number." ; 
         } 

      else { 
       document.getElementById("answer").innerHTML = "I'm sorry. " + number + " is not a perfect number. Try Again."; 
         } 
        } 
      else { 
       document.getElementById("answer").innerHTML = "Please enter a number."; 
        } 
       } 


function is_perfect(number) 
{ 
var temp = 0; 
for(var i=1;i<=number/2;i++) 
    { 
    if(number%i === 0) 
     { 
      temp += i; 
       } 
     } 

    if(temp === number) 
     { 
      return true; 
       } 
     else 
      { 
      return false; 
       }  
    } 

function clear_textbox(){ 
document.getElementById("answer").innerHTML = ""; 
document.getElementById("enteredNumber").value=""; 
document.getElementById("enteredNumber").focus(); 

    } 
+0

什麼是理想的效果,你沒有實現? – foxinatardis

回答

1

我建議修改你的is_perfect()功能,如果數字是完美的,如果null的數量是不完美的返回除數的數組。然後當輸入是一個完美的數字時,調用代碼有可用於顯示的除數。

function is_perfect(number) { 
    var temp = 0; 
    var divisors = []; 
    for(var i=1;i<=number/2;i++) { 
     if (number%i === 0) { 
      divisors.push(i); 
      temp += i; 
     } 
    } 

    return temp === number ? divisors : null; 
} 

然後:

var divisors = is_perfect(number); 
if (divisors) { 
    document.getElementById("answer").innerHTML =  "Congratulations! " + number + " is a perfect number."; 
    // display the divisors somewhere; the alert is just for show 
    alert("Divisors: " + divisors.toString()); 
} else { 
    ... 
} 

[注:在此應答的早期版本,我已經初始化temp 1和divisors[1]和2已經開始循環,從理論上說1總是一個除數。不幸的是,這是錯誤的,因爲1不是合適的除數1.修改後的版本is_perfect()現在返回null,參數1代替[1]。另一種解決將已經明確測試的情況下number === 1,但這是醜陋的(如果可能一點點更有效,因爲它避免了一個%評價)。]