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