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

BFE.devでのAI解答例 - JavaScript コーディング問題
126. BigDecimal 足し算

解法例:

function add(a, b) {
  // 文字列に変換する
  a = a.toString();
  b = b.toString();
  // 負号の処理と絶対値を取る
  let signA = a[0] === '-' ? -1 : 1;
  let signB = b[0] === '-' ? -1 : 1;
  a = a.replace('-', '');
  b = b.replace('-', '');
  // .を含む部分を切り分ける
  let intA = a.split('.')[0];
  let fracA = a.split('.')[1] || '';
  let intB = b.split('.')[0];
  let fracB = b.split('.')[1] || '';
  // 小数点以下を0埋めする
  while (fracA.length < fracB.length) {
    fracA += '0';
  }
  while (fracB.length < fracA.length) {
    fracB += '0';
  }
  // 加算
  let carry = 0;
  let result = '';
  for (let i = intA.length - 1; i >= 0; i--) {
    let sum = Number(intA[i]) + Number(intB[i]) + carry;
    carry = sum >= 10 ? 1 : 0;
    result = (sum % 10) + result;
  }
  for (let i = fracA.length - 1; i >= 0; i--) {
    let sum = Number(fracA[i]) + Number(fracB[i]) + carry;
    carry = sum >= 10 ? 1 : 0;
    result = (sum % 10) + result;
  }
  // 最終結果の後続ゼロを取り除く
  result = result.replace(/^0+/, '');
  if (result === '.') {
    result = '0';
  }
  // 結果に負号をつける
  if (signA === -1 && signB === -1) {
    result = '-' + result;
  } else if (signA === -1) {
    if (intA === intB && fracA === fracB) {
      result = '0';
    } else if (Number(intA) > Number(intB) || (Number(intA) === Number(intB) && Number(fracA) > Number(fracB))) {
      result = '-' + result;
    }
  } else if (signB === -1) {
    if (intA === intB && fracA === fracB) {
      result = '0';
    } else if (Number(intB) > Number(intA) || (Number(intA) === Number(intB) && Number(fracB) > Number(fracA))) {
      result = '-' + result;
    }
  }
  return result;
}

この解法では、まずaとbを文字列に変換し、それぞれの符号と絶対値を取ります。小数点以下の桁数を揃えるために、0を付け加える必要がある場合があります。それから、加算を行います。最後に、後続ゼロを取り除き、最終結果に負号を付けます。