この解答例は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;}