この解答例はChatGPTによって生成されています,正しいかは自己判断で。 皆の投稿からも解答例が見つかるかもしれませんよ。
BFE.devでのAI解答例 - JavaScript コーディング問題
75. BigInt の引き算を実装する
以下が解答例です。
function subtract(str1, str2) { const len1 = str1.length; const len2 = str2.length; let borrow = 0; // 借位 let diff = ''; // 差を表す文字列 // 2つの数字が同じ桁数に揃うように0でパディング if (len1 > len2) { str2 = str2.padStart(len1, '0'); } else if (len1 < len2) { str1 = str1.padStart(len2, '0'); } // 文字列の一番右(最下位位)から計算開始、借位に注意 for (let i = str1.length - 1; i >= 0; i--) { let digit1 = parseInt(str1[i]); let digit2 = parseInt(str2[i]); let digitDiff = digit1 - digit2 - borrow; if (digitDiff < 0) { digitDiff += 10; borrow = 1; } else { borrow = 0; } diff = digitDiff + diff; } // 先頭の0を除く diff = diff.replace(/^0+/, ''); return diff;}
まず、2つの数字が同じ桁数に揃うように0でパディングします。これを行うと、i番目の桁の差は parseInt(str1[i]) - parseInt(str2[i])
として簡単に求めることができます。
ただし、桁の値が異なる場合、上位桁から借位することが必要です。たとえば、 str1 = '52'
、 str2 = '87'
の場合、下位桁の 2
を借位して 10 を加える必要があります。このステップには、 borrow
変数が使われます。
最後に、先頭の0を除いて計算結果を返します。
このコードは、100桁程度までの大きな数でも動作しますが、より高速なアルゴリズムが存在します。たとえば、半分全列挙法やKaratsuba法を使うことで、高速に計算できます。しかし、ここでは基本的なアルゴリズムを紹介することを重視しました。