blog

一日一リーツ(文字列の足し算)難易度:易Day20200803

2つの非負整数 num1 と num2 が文字列形式で与えられているとき、それらの和を計算しなさい。 num1 と num2 はどちらも 5100 より小さい。 num1 と num2 はどちらも 0...

Feb 12, 2020 · 2 min. read
シェア

:

2つの非負整数 num1 と num2 が文字列形式で与えられたとき、それらの和を計算しなさい。

注目してください:

  1. num1 と num2 の両方が 5100 未満です。
  2. num1 も num2 も、0-9 の数字だけを含んでいます。
  3. num1 にも num2 にも先頭のゼロはありません。
  4. 組み込みの BigInteger ライブラリは使用できませんし、入力文字列を直接整数に変換することもできません。

タオル投入

推論

  • アナログ加算、ビット単位の加算で10以上は切り捨て

解き方

  • num1 と num2 の桁が異なる場合、文字列の先頭でゼロ補完されます。
  • 桁ごとの和:魏
    • 構成: num1[i] + num2[j] + jin (前の和の丸め)
    • wei%10 このラウンドの合計がビットの番号に保持されます。
    • wen%10 このラウンドの合計を繰り上げる桁数。
/** * @param {string} num1 * @param {string} num2 * @return {string} */ var addStrings = function (num1, num2) { let len1 = num1.length, len2 = num2.length, jin = 0, // wei = 0, // ネイティブ・サムの和 bu = '', result = '' // 小さい文字列をゼロで補完する for (let i = 1; i <= Math.abs(len1 - len2); i++) { bu = bu + '0' } len1 > len2 ? (num2 = bu + num2) : (num1 = bu + num1) // ビットごとの加算 -> ローからハイへ for (let i = Math.max(len1, len2) - 1; i >= 0; i--) { // ネイティブ・サムの和 wei = (parseInt(num1.charAt(i), 10) 0) + (parseInt(num2.charAt(i), 10) 0) + parseInt(jin, 10) // 更新結果 result = parseInt(wei % 10, 10).toString() + result // 丸めを保存する jin = wei >= 10 ? parseInt(wei / 10, 10) : 0 } // ビットずつ加算する進行が残っている場合、それらは結果に直接スプライスされる。 return jin > 0 ? jin.toString() + result.toString() : result.toString() }

上記のメソッドは、ビット単位の足し算のロジックを完成させるために文字列を補完します。 実際に文字列を操作するのを避けるために、レコードのインデックス、つまり位置を使用することができます。

  • num1[i]+num2[j]+jin
    • i,jは高い方から減少
    • iまたはjが0より小さいとき、num1[i]またはnum2[j]は0。
/** * @param {string} num1 * @param {string} num2 * @return {string} */ var addStrings = function (num1, num2) { let i = num1.length - 1, j = num2.length - 1, jin = 0, wei = 0, result = '' while (i >= 0 j >= 0 jin != 0) { const x = i >= 0 ? num1.charAt(i) - '0' : 0 const y = j >= 0 ? num2.charAt(j) - '0' : 0 wei = x + y + jin result = (wei % 10).toString() + result jin = parseInt(wei / 10, 10) i -= 1 j -= 1 } return result }
Read next

Conflux ネットワーク "奇妙な" ノード

Confluxのマイニングテスト活動が始まり、コミュニティの友人はしばしばそのような問題に言及:Confluxの様々な "ノード "で最後に今日の意味は何ですか、あなたに説明します。 ブートノードはノードの起動時に最初に接続されるノードで、ブートノードから他のノードの情報を取得し、より多くのノードに接続します。現在、ブートノードがメイン ...

Feb 12, 2020 · 2 min read