2017-10-18 1 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; 
} 
} 

그러나 원하는 효과를 얻을 수 없습니다. 나는 자바 스크립트에 아주 익숙하고 올바른 방식으로 코드를 삽입하는 데 어려움을 겪고있다. 누구든지 원하는 효과를 얻을 수있는 방법에 대한 제안이 있습니까? 나는 숫자가 완벽하지 않은 경우 번호가 완벽하고 null 경우 약수의 배열을 반환하기 위해 is_perfect() 기능을 수정하는 게 좋을 것

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

: 여기에 이미 작성한 코드입니다. 그런 다음 호출 코드는 입력이 완전한 숫자 일 때 표시 할 약수를 갖습니다. 그런 다음

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

[참고 : 이론 1이에,이 답변의 이전 버전에서, 나는 [1]-1에 tempdivisors을 초기화했고 2에서 루프를 시작했다 항상 제수입니다. 불행히도, 1은 의 적절한 숫자가 아니기 때문에 잘못되었습니다. is_perfect()의 개정 된 버전은 이제 [1] 대신 1의 인수로 null을 반환합니다. 또 다른 해결 방법은 number === 1 사례를 명시 적으로 테스트하는 것이었지만, 그 방법은 하나의 % 평가를 피할 수 있기 때문에 더 쉽습니다.]

관련 문제