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 {
...
}