この解答例はChatGPTによって生成されています,正しいかは自己判断で。

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

以下はJavaScriptによる解答例です。

function substract(a, b) {
  // 文字列の前後にある空白を削除してから符号を確認する
  const negativeA = a.trim().startsWith('-');
  const negativeB = b.trim().startsWith('-');

  // 符号を削除する
  a = a.trim().replace(/^[-+]/, '');
  b = b.trim().replace(/^[-+]/, '');

  // 引き算の結果が負になる場合、符号を反転する
  let negativeResult = false;
  if (negativeA && !negativeB) {
    negativeResult = true;
  } else if (!negativeA && negativeB) {
    negativeResult = false;
  } else if (!negativeA && !negativeB && a.length < b.length) {
    negativeResult = true;
  } else if (!negativeA && !negativeB && a.length > b.length) {
    negativeResult = false;
  } else {
    for (let i = 0; i < a.length; i++) {
      if (a[i] < b[i]) {
        negativeResult = true;
        break;
      } else if (a[i] > b[i]) {
        negativeResult = false;
        break;
      }
    }
  }

  // 数字を逆順にして、桁上がりを考慮しながら引き算する
  a = a.split('').reverse();
  b = b.split('').reverse();
  const result = [];
  let carry = 0;
  for (let i = 0; i < Math.max(a.length, b.length); i++) {
    const digitA = Number(a[i] || 0);
    const digitB = Number(b[i] || 0);
    const digitResult = digitA - digitB - carry;
    if (digitResult < 0) {
      result.push(digitResult + 10);
      carry = 1;
    } else {
      result.push(digitResult);
      carry = 0;
    }
  }

  // 頭のゼロを削除して、符号をつけて結果を返す
  let output = result.reverse().join('').replace(/^0+/, '');
  output = negativeResult ? '-' + output : output;
  return output;
}