欧几里得算法(JS)

Euclidean algorithm (JS)

本文关键字:算法 JS 几里      更新时间:2023-09-26

(对不起我的英语=/)这是伪:

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,。。。等等什么都没有。。

当您检索ab时,您得到的是字符串,而不是数字,因此lnko没有达到您的预期。具体地说,这导致了比较中的问题:10 > 5"10" < "5"

解决这个问题的一个简洁方法是:

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

正如Pascal Belloncle所指出的,您可以交替使用:

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

最大的区别将是如何处理像42a这样格式错误的"数字"。第一种形式(+doc...)无法将值转换为数字并返回NaN,而parseInt则解析它所能解析的内容并返回42