この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。

BFE.devでのAI解答例 - JavaScript コーディング問題
75. BigInt の引き算を実装する

以下が解答例です。

function subtract(str1, str2) {  const len1 = str1.length;  const len2 = str2.length;  let borrow = 0; // 借位  let diff = ''; // 差を表す文字列  // 2つの数字が同じ桁数に揃うように0でパディング  if (len1 > len2) {    str2 = str2.padStart(len1, '0');  } else if (len1 < len2) {    str1 = str1.padStart(len2, '0');  }  // 文字列の一番右(最下位位)から計算開始、借位に注意  for (let i = str1.length - 1; i >= 0; i--) {    let digit1 = parseInt(str1[i]);    let digit2 = parseInt(str2[i]);    let digitDiff = digit1 - digit2 - borrow;    if (digitDiff < 0) {      digitDiff += 10;      borrow = 1;    } else {      borrow = 0;    }    diff = digitDiff + diff;  }  // 先頭の0を除く  diff = diff.replace(/^0+/, '');  return diff;}

まず、2つの数字が同じ桁数に揃うように0でパディングします。これを行うと、i番目の桁の差は parseInt(str1[i]) - parseInt(str2[i]) として簡単に求めることができます。

ただし、桁の値が異なる場合、上位桁から借位することが必要です。たとえば、 str1 = '52'str2 = '87' の場合、下位桁の 2 を借位して 10 を加える必要があります。このステップには、 borrow 変数が使われます。

最後に、先頭の0を除いて計算結果を返します。

このコードは、100桁程度までの大きな数でも動作しますが、より高速なアルゴリズムが存在します。たとえば、半分全列挙法やKaratsuba法を使うことで、高速に計算できます。しかし、ここでは基本的なアルゴリズムを紹介することを重視しました。