Javascript 没有给出正确的整数输出——欧拉 20 项目
Javascript doesn't give correct integer output -- Project Euler 20
我正在尝试解决欧拉项目问题 20,虽然我认为解决方案非常简单,但事实证明 Javascript 没有给我正确的输出:
var fact = 1;
for (var i = 100; i > 0; i--) {
fact *= i;
}
var summed = 0;
while (fact > 0) {
summed += Math.floor(fact % 10);
fact = fact / 10;
}
console.log(summed); //587
http://jsfiddle.net/9uEFj/
现在,让我们尝试从底部求解 100!(即 1 * 2 * 3 * ... * 100 而不是像以前那样的 100 * 99 * .. * 1):
var fact = 1;
for (var i = 1; i <= 100; i++) {
fact *= i;
}
var summed = 0;
while (fact > 0) {
summed += Math.floor(fact % 10);
fact = fact / 10;
}
console.log(summed); //659
http://jsfiddle.net/YX4bu/
这是怎么回事?为什么不同的乘法顺序给我不同的结果?另外,为什么没有一个结果给我问题 20 的正确结果?(648)
前 100 个整数的乘积是一个大数,量级为 1e158。这将作为浮点数处理,从而导致精度损失。有关更全面的解释,请参阅浮点指南。您的两次乘法的结果与 15 个有效数字匹配,但在第 16 个及以后有所不同。这足以抛出你的最终结果。
要正确地做到这一点,你需要在整个过程中使用整数算法 - 这远远超出了Javascript的原生功能。您需要处理 158 位数字,并自己编写乘法例程。
如果使用字符串格式来存储数字,则脚本的第二部分只需要对数字求和。
相关文章:
- 在JavaScript中输出转义字符
- 如何在jQuery中将函数的输出分配给变量
- 如何使用js将SNAPSHOT内部版本号转换为3位数的整数
- 检测个位数整数时正在转换毫秒
- 限制javascript变量的最小/最大整数
- 如何在 Javascript 中将变量的值从字符串转换为整数
- 正则表达式只允许 x 个整数
- Javascript,输出结果后页面不断刷新
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 如何在Chartjs中制作整数比例
- Datetime格式为Friendly Time.Moment JS输出错误
- 如何将angularjs中的javascript字符串输出为循环数组
- HTML5FileReader输出到D3.js图表
- console.log以外的Javascript输出函数
- Eloquent JavaScript递归示例如何终止为返回1,但仍然输出指数值
- 减去两个索引不同但值相同的整数
- 整数 + 2x 单选按钮设置输入 --> 输出
- 比较 2 个数组以输出总整数
- Javascript 没有给出正确的整数输出——欧拉 20 项目
- Rhino JS / ScriptEngine来自Java -整数输入,双输出