第20講 n進数演算−−−引き算
第3話 大小比較はいかにしたら出来るか?
この大小比較は、
おそらく皆さんが予想しているより、
困難な課題です。
次の例のように、
25635
 3208
桁数が違うなら、桁数の大きい方が大きい数です。
桁数を比較するには
n25635
 n3208
終わりの印nまでの桁数を数えれば済みます。
ですが、桁数が同じときに、
大きな壁が現れます。
n1************
n2************
の例から、終わりの印nの1つ手前の数字を比較すれば、
大小が決するように見ます。
ところが、
n2************
n2************
のように、
最高位の数字だけを比較しただけでは大小が決定できない場合があります。
次の箱を開けて中身を確認しても、
n23************
n23************
左から2番目の位の数字も同じになってしまうケースもあります。
では、さらにもう1つ箱を開けて
n231***********
n234***********
なら大小が決まりますが、

n234***********
n234***********

となる可能性が残ります。
ならば、もうひとつの扉を開けて、

n2343**********
n2342**********
なら、大小決定ですが、
ここでも、
n2343**********
n2343**********
再び同じになる可能性があります。

ならば、一度10進数に直して比較する手がありそうですが、
987625070
(16)=9×16の8乗+8×16の7乗+7×16の6乗+・・・
あたりで、簡単にLongの範囲を超えてしまします。
n進数演算の究極の目的が、
巨大整数の研究である以上、
10進数に翻訳する方法は最初から不可能です。
ですから、パンドラの箱を開け続けるしかないのです。
n23431*********
n23431*********

n234310********
n234310********

n2343103*******
n2343103*******

ですが、どこまで行っても大小が決定できない場合もあります。
n23431031236987258
n23431031236987258
そうです。
同じ大きさの可能性があるのです。

桁数が同じ場合の大小比較は、
For文を使い、
終わりの印nの1つ手前から始めて、
大小が決定した段階で、
For文をExit Forによって強制的に抜ければよいのです。
では、ランダム2つのデータを発生させて、
大小を比較するプログラムを組んで下さい。
cefe
f34
大小判定は、専用のファンクションプロシージャ
Function h(a() As Integer, b() As Integer, n As Integer)
を用意して、
aの方が大きいときには2を返えし、
bの方が大きいときには0を返えし、
等しいときには1を返すようにして下さい。
そして、返された値を利用してPrivate Sub CommandButton1_Click()で
a<b
等を表示して下さい。



第2話へ 第4話へ
004

eclipse c++ 入門
魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
vc++講義へ
excel 2013 2010 2007 vba入門へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
専門用語なしの C言語 C++ 入門(Visual C++ 2010で学ぶ C言語 C++ 入門)
専門用語なしの excel vba マクロ 入門 2013 2010 2007 対応講義 第1部
eclipse java 入門へ
excel 2016 vba 入門へ
小学生からエンジニアまでのRuby入門へ
本サイトトップへ