javascript - 计算幂和的问题

标签 javascript arrays string number-formatting

这是任务。

Given an array, a machine outputs the sum of every other digit to the power of the next digit.
For example:
Given array [w, x, y, z], the output would be the value of

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 编写的代码,给出了错误的结果 我得到的结果是

11435883505615212126533795412033207225778495075718925120324378434412473255413622199745757444394949763886585823050543835 75339973680209682418

这是错误的。

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);

最佳答案

我建议使用 big-integer图书馆:

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])));

关于javascript - 计算幂和的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50925101/

相关文章:

javascript - 在 DB 中保存 summernote

python - 替换 numpy 数组中的一些值

c - 在 C 中越界访问数组不会产生运行时错误

PHP 在 foreach 中单独求和值

c# - 重新格式化字符串以逗号分隔和格式化

Python 字符串格式 : For loops?

javascript - Discord.js - 尝试等待异步进程并允许包装器的递归调用

javascript - 如何在我的网站上使用 javascript API?

javascript - 如何在触发另一个 click() 时清除 click()?

r - 检测字符串是否按特定顺序出现