2013-02-16 80 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