欧几里得算法(JS)
Euclidean algorithm (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,。。。等等什么都没有。。
当您检索a
和b
时,您得到的是字符串,而不是数字,因此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
。
相关文章:
- Node JS中的排名系统算法
- 最短路径算法js错误
- Node.js上的高性能算法
- JS算法í用于li元素造型的thm
- Node.js' crypto.createSign() 的有效算法输入字符串
- 使用二进制细分算法用js缩放图像
- Drupal |缓存页面中未缓存的JS cookie/跟踪代码算法
- http上的自定义JS加密算法
- Gridster.js中更新瓦片位置的算法是什么
- 为什么这个递归算法在JS中不起作用?
- 在JS中设置多个ajax请求返回时的处理程序的算法
- 数学/算法/ JS:如何确定2+矩形是否相交,给定每个矩形的TopLeft(x0, y0)和Bottom-Right(x
- 在JS中寻找Blake-512哈希算法的实现
- 是否有PHP或JS算法可以过滤掉字符串上的名词
- 是否有一种方法可以使用HTML5大纲算法和CSS(可能还有JS)生成文档导航
- 性能方面,算法复杂性方面,下面两个JS函数中哪一个用于将字符串的第一个字母大写更好,为什么?
- 一个js循环结构的算法设计
- 欧几里得算法(JS)
- 密码加密算法在从PHP转换为JS时会抛出异常
- Node.js的目的是什么?[例如:在服务器上可用的数据集上实现图形算法]