この解答例は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を付け加える必要がある場合があります。それから、加算を行います。最後に、後続ゼロを取り除き、最終結果に負号を付けます。