第26講 n進数の演算---その2 減法
第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 longの範囲を超えてしまします。
n進数演算の究極の目的が、
巨大整数の研究である以上、
10進数に翻訳する方法は最初から不可能です。
ですから、パンドラの箱を開け続けるしかないのです。
n23431*********
n23431*********

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

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

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

桁数が同じ場合の大小比較は、
for文を使い、
終わりの印nの1つ手前から始めて、
大小が決定した段階で、
for文をbreak文によって強制的に抜ければよいのです。
では、ランダム2つのデータを発生させて、
大小を比較するプログラムを組んで下さい。
d
大小判定は、専用のchar型の関数
char ds(int* a,int* b,int n,int j1,int j2);
を用意して、
aの方が大きいときには2を返えし、
bの方が大きいときには0を返えし、
等しいときには1を返すようにして下さい。
そして、返された値を利用してmainで
a<b
等を表示して下さい。

第2話へ 第4話へ

a

eclipse c++ 入門講義第1部へ

eclipse c++ 入門講義第2部へ


魔方陣 数独で学ぶ VBA 入門
数独のシンプルな解き方・簡単な解法の研究
VB講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 C++ 入門 基礎から応用まで第1部
eclipse java 入門
java 入門 サイト 基礎から応用まで
VC++ C言語 C++ 入門 初心者 基礎から応用まで
本サイトトップへ