javascript - 计算幂和的问题
问题描述
这是任务。
给定一个数组,机器输出每个其他数字的总和到下一个数字的幂。
例如:
给定array [w, x, y, z]
,输出将是
Math.pow( w, x ) + Math.pow( y, z )
.
问题
找到机器给定数组的输出: [98, 45, 97, 36, 22, 62, 88, 71, 16, 20, 54, 59, 23, 31, 12, 23, 77, 39, 37, 51, 68、69、92、30]。
这是我用 JS 编写的代码,它给出了错误的结果,我得到的结果是
114358835056152121265337954120332072257784950757189251203243784344124732554136221997457574443949497638865858230505438357582978
这是错误的。
let a = [98, 45, 97, 36, 22, 62, 88, 71, 16, 20, 54, 59, 23, 31, 12, 23, 77, 39, 37, 51, 68, 69, 92, 30];
let s = 0,
r = 1;
for (let i = 0; i <= 22; i = i + 2) {
for (let j = 1; j <= a[i + 1]; j++) {
r = multiply(r, a[i]);
}
s = sum(s, r);
r = 1;
}
// Add big numbers as strings in order to avoid scientific (exponent) notation
function sum(arg1, arg2) {
var sum = "";
var r = 0;
var a1, a2, i;
if (arg1.length < arg2.length) {
a1 = arg1;
a2 = arg2;
} else {
a1 = arg2;
a2 = arg1;
}
a1 = a1.toString().split("").reverse();
a2 = a2.toString().split("").reverse();
for (i = 0; i < a2.length; i++) {
var t = ((i < a1.length) ? parseInt(a1[i]) : 0) + parseInt(a2[i]) + r;
sum += t % 10;
r = t < 10 ? 0 : Math.floor(t / 10);
}
if (r > 0)
sum += r;
sum = sum.split("").reverse();
while (sum[0] == "0")
sum.shift();
return sum.length > 0 ? sum.join("") : Number("");
}
// Multiply big numbers as strings in order to avoid scientific (exponent) notation
function multiply(a, b) {
var aa = a.toString().split('').reverse();
var bb = b.toString().split('').reverse();
var stack = [];
for (var i = 0; i < aa.length; i++) {
for (var j = 0; j < bb.length; j++) {
var m = aa[i] * bb[j];
stack[i + j] = (stack[i + j]) ? stack[i + j] + m : m;
}
}
for (var i = 0; i < stack.length; i++) {
var num = stack[i] % 10;
var move = Math.floor(stack[i] / 10);
stack[i] = num;
if (stack[i + 1])
stack[i + 1] += move;
else if (move != 0)
stack[i + 1] = move;
}
return stack.reverse().join('');
}
// Print the result
console.log(s);
解决方案
我建议使用大整数库:
let a = ...;
let s = bigInt()
for (var i = 0; i < a.length; i += 2)
s = s.plus(bigInt(a[i]).pow(bigInt(a[i+1])));
推荐阅读
- node.js - Nightwatch:无法创建新服务:ChromeDriverService
- python - 如何从 Pandas 中的给定行和列开始读取 Excel 文件
- ignite - Apache Ignite 与 SQL Server 性能对比
- c# - 通过 .NET 访问电话文件
- azure - MarkLogic - 森林数据文件夹和 Azure Blob
- c# - Automapper EF 类到模型类
- python - 从 CSV 读取并计算平均值(python)
- charts - Chart.js 图表只有两个坐标
- reactjs - 将 basename 设置为 Domain/reactapp/#/home 而不是 Domain/#/reactapp/home
- spring-boot - Spring rabbitmq amqp connection Factory - How override connection properties