Javascript 检查完美数并打印除数?

Javascript 检查完美数并打印除数?,javascript,Javascript,我的目标是创建一个程序来检查用户输入是否是一个完美的数字。它对输入的数字进行了验证。如果输入是一个完美的数字,我想打印出每个除数。我试着用这个方法: { 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++) {

我的目标是创建一个程序来检查用户输入是否是一个完美的数字。它对输入的数字进行了验证。如果输入是一个完美的数字,我想打印出每个除数。我试着用这个方法:

 {
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();

    }
我建议修改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;
 }

[注意:在这个答案的早期版本中,我将temp初始化为1,将除数初始化为[1],并在2开始循环,理论上1始终是一个除数。不幸的是,这是错误的,因为1不是1的适当除数。is_perfect的修订版本现在对参数1而不是[1]返回null。另一种解决方案是显式测试案例编号===1,但如果效率稍高一点,那就更难看了,因为它避免了1%的评估。]

您没有达到的预期效果是什么?
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 {
    ...
}