はじめに
このプロジェクトでは、文字列として表された 2 つの大きな整数を加算する関数を実装する方法を学びます。これは、現実世界のシナリオで遭遇する一般的な問題であり、組み込みの JavaScript 数値データ型は、非常に大きな数を表現して算術演算を行う際に制限があります。
タスク
このプロジェクトでは、以下を学びます。
- プロジェクト環境をセットアップし、必要なファイルを作成する。
- 文字列として表された 2 つの大きな数を加算するロジックを実装する。
- 提供された例で
addBigNum関数をテストする。 - ソリューションを最適化する方法を検討する(オプション)。
成果
このプロジェクトでは、以下を学びます。
- JavaScript で文字列を使って大きな数を扱う方法。
- 端数のケースを処理し、加算演算の正確性を保証する技術。
addBigNum関数のパフォーマンスを最適化する戦略。- 保守性と読みやすさのあるコードを書くためのベストプラクティス。
プロジェクト環境をセットアップする
このステップでは、「大きな整数の加算」プロジェクトのためにプロジェクト環境をセットアップし、必要なファイルを作成します。
好きなコードエディタを開き、
/home/labex/projectディレクトリに移動します。/home/labex/projectディレクトリにaddBigNum.jsという名前の新しいファイルを作成します。addBigNum.jsファイルに、次のコードを起点として追加します。
/*
文字列として表された 2 つの大きな数を加算し、その和を文字列として返します。
パラメータ:
- num1: 最初の大きな数を表す文字列。
- num2: 2 番目の大きな数を表す文字列。
返り値:
- 2 つの入力数の和を表す文字列。
*/
function addBigNum(num1, num2) {
// ここに実装を記述します
}
module.exports = addBigNum;
このコードは、プロジェクトの指示に従って addBigNum 関数を定義し、それをエクスポートします。
加算ロジックを実装する
このステップでは、文字列として表された 2 つの大きな数を加算するロジックを実装します。
addBigNum関数では、まず入力文字列num1とnum2を数字の配列に変換します。
const digits1 = num1.split("").map(Number); // num1 文字列を数字の配列に変換
const digits2 = num2.split("").map(Number); // num2 文字列を数字の配列に変換
- 必要に応じて先頭にゼロを追加することで、配列
digits1とdigits2が同じ長さになるようにします。
while (digits1.length < digits2.length) {
digits1.unshift(0);
}
while (digits2.length < digits1.length) {
digits2.unshift(0);
}
- 最終的な和の数字を格納する
result配列と、加算中の桁上がり値を追跡するcarry変数を初期化します。
const result = [];
let carry = 0; // 加算用の桁上がり値
- 右から左に向かって数字を反復処理し、加算を行い
carry値を更新します。
for (let i = digits1.length - 1; i >= 0; i--) {
const sum = digits1[i] + digits2[i] + carry;
const digit = sum % 10; // 現在の桁の値
carry = Math.floor(sum / 10); // 桁上がりを計算
result.unshift(digit); // 現在の桁を結果配列の先頭に追加
}
- 残った桁上がり値がある場合は、それを
result配列の先頭に追加します。
if (carry > 0) {
result.unshift(carry);
}
result配列を文字列に変換し、それを最終的な和として返します。
const sumStr = result.join(""); // 結果配列を文字列に変換
return sumStr;
addBigNum 関数をテストする
このステップでは、提供された例を使って addBigNum 関数をテストします。
- コードエディタで、
addBigNum.jsファイルの末尾に次のコードを追加します。
// addBigNum 関数をテストする
console.log(addBigNum("0", "0")); // 出力:0
console.log(addBigNum("99", "1")); // 出力:100
console.log(addBigNum("11", "123")); // 出力:134
console.log(addBigNum("9007199254740992", "1")); // 出力:9007199254740993
addBigNum.jsファイルを保存し、ターミナルで次のコマンドを実行します。
node /home/labex/project/addBigNum.js
出力は、プロジェクトの指示に記載された期待される結果と一致する必要があります。
解決策を微調整して最適化する(オプション)
このオプションのステップでは、addBigNum 関数をさらに最適化する方法を検討できます。いくつかの潜在的な改善点は以下の通りです。
- 負の数やゼロを入力として扱う。
- 非常に大きな数に対するパフォーマンスを向上させる。
- 無効な入力に対するエラーハンドリングを追加する。
- コードの読みやすさと保守性を向上させる。
コードを試してみて、全体的なソリューションを改善するために必要な変更を加えても構いません。
おめでとうございます!「大きな整数の加算」プロジェクトを完了しました。質問やさらなる支援が必要な場合は、遠慮なくお尋ねください。
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って技術力を向上させることができます。



