2013-02-16 115 views
-1

(對不起,我的英語= /) 這是僞:歐幾里德算法(JS)

function lnko(a, b) 

    -if a = b then lnko := a 

    -if a < b then lnko := lnko(a, b-a) 

    -if a > b then lnko := lnko(a-b, b) 

function end 

我的代碼是:

<html> 
<head> 
    <script type="text/javascript"> 
     function run() 
      { 
       var a = document.getElementById("a").value; 
       var b = document.getElementById("b").value; 

       var s = lnko(a,b) 
       document.write(a+"/"+b+"<br>"+(a/s)+"/"+(b/s)); 
      // document.write("<br>"+s) 
      } 
     function lnko(a,b) 
      { 
       alert(a+"..."+b) 
       if (a==b) 
        { 
         return a; 
        } 
       if (a<b) 
        { 
         return lnko(a,(b-a)); 
        } 
       if (a>b) 
        { 
         return lnko((a-b),b); 
        } 
      } 
    </script> 
</head> 
<body> 
    <input type="text" id="a" /> 
    <input type="text" id="b" /> 
    <input type="button" onclick="run()" /> 
</body> 

的問題是,如果我用10/5,15/3,...等來叫lnko,它什麼也不做。

+2

_「它什麼都不做」_它應該做什麼? – 2013-02-16 00:22:20

+1

-1你應該花更多的精力來解釋你的問題。 「*它什麼都不做*」不提供任何信息。 – 2013-02-16 00:35:27

回答

6

當您檢索ab時,您所得到的是字符串而不是數字,因此lnko未達到您的預期。具體而言,這在比較中造成問題:10 > 5但是​​。

一個簡潔的方式來解決這個問題是:

var a = +document.getElementById("a").value; 
var b = +document.getElementById("b").value; 

帕斯卡Belloncle指出的那樣,你可以交替使用:

var a = parseInt(document.getElementById("a").value, 10); 
var b = parseInt(document.getElementById("b").value, 10); 

最大的區別將如何畸形的「數字」像42a GET對待。第一種形式(+doc...)無法將該值轉換爲數字,並返回NaN,而parseInt解析了它的結果並返回42

+4

或者使用parseInt()來更加明確。 – 2013-02-16 00:27:37

+0

@PascalBelloncle注意,不過'parseInt(x,10)'與'+ x'不一樣。 – 2013-02-16 00:32:47

+0

@PascalBelloncle:好點!澄清顯示差異。 – DocMax 2013-02-16 00:32:53