100桁の正の整数値の足し算
ツイッターで出したVBAのお題です。
数の単位に「無量大数」というものがあります。
VBAでこの無量大数の足し算をするにはどうしたら良いでしょうか。
そこで、100桁の正の整数の足し算をVBAで実現してみましょう。
お題のツイート

数の単位に「無量大数」というものがある。
その桁数は10^68(10^88とする場合もあるよう)です。
VBAでこの無量大数の足し算をしたいと思います。
この際、区切りよく100桁の足し算をしてください。
※入力は10進文字列
※足し算だけで良い
正の整数限定です。
関数の2つの引数を足し算するだけです。
解説のツイート
RSet、LSetの説明ページを作りたかったのですが、実際に使う事がほとんどないために書けずにいました。
特にLSetでユーザー定義型をコピーする説明を書いておきたかったのですが、、、
私の回答VBAは、これを題材としたものになっています。
Longが~2147483647
Currencyが~922337203685477
LongLongが~9223372036854775807
Decimalが~79228162514264337593543950335
※Decimalは変数宣言できません。VariantとCDec関数を使用します。
いずれにしても100桁には遠く及びません。
区切り単位は、Longの有効桁数の9桁以内でしょう。
例えば5桁なら、結果が6桁になれは先頭の1桁を左の区切りに加算します。
計算が終わったら結果を文字列として連結すれば完成します。
そこで、1桁なら区切るのも桁位置も簡単なので、まずは1桁でやってみると良いと思います。
1桁なら1文字ずつ区切ればよいので簡単です。
後は2つの数値の桁数を意識すれば良いだけです。
筆算するなら1の位の位置を揃えて書きます。
つまり右端から足し算していくことになります。
小さい数値の頭に大きい数値と同じ桁数になるだけの0を付け足して同じ桁数にするのも良いでしょう。
https://twitter.com/hoehoe1234/status/1280901878910316544
桁位置や繰り上がりの部分はぜひ参考に読み解いてみてください。
桁数を揃えるのにRSetを使い、
1文字区切りの方法としてLSetでユーザー定義型のコピーを使っています。
MSでは推奨されていない方法ですが、こういう事もできるという紹介になります。
「LSetとユーザー定義型のコピー(100桁の足し算)」
追記
小数点を扱う場合は小数点で分割して同様の事をすれば良いでしょう。
マイナス数値を扱う場合は引き算を実装すれば良いと思います。
方法は各種ありますが、
大から小の引き算が出来れば、符号と絶対値の大小比較で、足し算とこの引き算で計算できます。
暗算する時にやっている事ですね。
同じテーマ「ツイッター出題回答 」の記事
Variantの数値型と文字列型の比較
Variant仮引数にRange.Valueを配列で渡す方法
Variant仮引数のByRefとByValの挙動違い
100桁の正の整数値の足し算
「VBA Match関数の限界」についての誤解
VBAで数値を漢数字に変換する方法
囲碁で相手の石を囲んで取るアルゴリズム
VBAで「3Lと5Lのバケツで4Lの水を作る」を解く
言語依存の関数を使用できるFormulaLocal
配列のUBoundがLBoundがより小さいことはあり得るか
コレクションの要素を削除する場合
新着記事NEW ・・・新着記事一覧を見る
新旧マスタの差異比較|Power Query(M言語)入門(2023-02-28)
有効な最新単価の取得|Power Query(M言語)入門(2023-02-26)
有効な最新単価の取得|Power Query(M言語)入門(2023-02-21)
グルーブ内の最小・最大|Power Query(M言語)入門(2023-02-17)
2つのテーブルのマージ|Power Query(M言語)入門(2023-02-15)
「売上」が数値の行のみ取り込む|Power Query(M言語)入門(2023-02-13)
A列のヘッダー名を変更する|Power Query(M言語)入門(2023-02-11)
CSVのA列が日付の行だけを取り込む|Power Query(M言語)入門(2023-02-10)
列数不定のCSVの取り込み|Power Query(M言語)入門(2023-02-09)
別ブックの最終シートの取り込み|Power Query(M言語)入門(2023-02-08)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.マクロって何?VBAって何?|VBA入門
7.並べ替え(Sort)|VBA入門
8.Excelショートカットキー一覧|Excelリファレンス
9.エクセルVBAでのシート指定方法|VBA技術解説
10.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。