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桁の足し算)」
追記
小数点を扱う場合は小数点で分割して同様の事をすれば良いでしょう。
マイナス数値を扱う場合は引き算を実装すれば良いと思います。
方法は各種ありますが、
大から小の引き算が出来れば、符号と絶対値の大小比較で、足し算とこの引き算で計算できます。
暗算する時にやっている事ですね。
同じテーマ「ツイッター出題回答 」の記事
「VBA Match関数の限界」についての誤解
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。