この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
76. BigIntの足し算を実装する II
function add(num1, num2) { let sign1 = num1[0] === '-' ? -1 : 1; // num1の符号 let sign2 = num2[0] === '-' ? -1 : 1; // num2の符号 let numArr1 = num1.split(''); // num1を配列に変換 let numArr2 = num2.split(''); // num2を配列に変換 // num1とnum2の符号が同じ場合 if (sign1 === sign2) { let sum = ''; // 和を格納する変数 let carry = 0; // 桁上がりを格納する変数 // num1とnum2のどちらかが負の場合、符号を取り除いた配列から_i番目の値を取得する // 両方が正の場合、符号を取り除いた配列から後ろの_i番目の値を取得する for (let i = 1; i <= Math.max(numArr1.length, numArr2.length); i++) { let val1 = numArr1[numArr1.length - i] || 0; let val2 = numArr2[numArr2.length - i] || 0; let digitSum = carry + sign1 * val1 + sign2 * val2; // i桁目の和を計算する carry = Math.floor(digitSum / 10); // 桁上がりを計算する sum = Math.abs(digitSum % 10) + sum; // 各桁の数値を格納する } // 結果のコードを作成する if (carry !== 0) { sum = carry + sum; } if (sign1 === -1) { sum = '-' + sum; } return sum; } // num1とnum2の符号が異なる場合、足し算を引き算に変換する if (sign1 !== sign2) { // num1が負の場合、符号を取り除いた配列から_i番目の値を取得する if (sign1 === -1) { numArr1.shift(); return subtract(numArr2.join(''), numArr1.join('')); } // num2が負の場合、符号を取り除いた配列から_i番目の値を取得する if (sign2 === -1) { numArr2.shift(); return subtract(numArr1.join(''), numArr2.join('')); } }}// 引き算の関数function subtract(num1, num2) { let numArr1 = num1.split(''); let numArr2 = num2.split(''); let borrow = 0; // 借りを格納する変数 let diff = ''; // 差を格納する変数 for (let i = 1; i <= Math.max(numArr1.length, numArr2.length); i++) { let val1 = numArr1[numArr1.length - i] || 0; let val2 = numArr2[numArr2.length - i] || 0; let digitDiff = val1 - borrow - val2; // i桁目の差を計算する if (borrow > 0) { borrow = 0; } if (digitDiff < 0) { digitDiff += 10; // 借りている場合は10を加える borrow = 1; // 桁借りを設定する } diff = digitDiff + diff; } // 先頭の余分な0を削除する while (diff[0] === '0' && diff.length > 1) { diff = diff.slice(1); } // 結果の符号を決定する if (borrow === 1 && num1 !== num2) { diff = '-' + diff; } return diff;}
この問題では、まず add
関数で符号の処理を行い、両方の引数を正の整数として扱います。その後、符号の差に基づいて足し算を引き算に変換します。
足し算は、各桁で和を計算し、桁上がりを次の桁に渡すことによって実行されます。引き算は、各桁で差を計算し、借りを次の桁に渡すことによって実行されます。
最後に、結果の符号を計算して、結果を返します。