第3講 繰り返し処理for文
第3話 階乗の計算
1×2×・・・×8の解答例
Module Module1
Sub Main() '私は社長だ。
Dim a, i As Integer 'aは整数を入れる箱を用意 iはFor文の制御変数
a = 1 '初期化
'以下計算
For i = 1 To 8
a *= i
Next
'以上計算
Console.WriteLine("1×2×・・・×8={0:d}", a)
End Sub
End Module
実行結果
1×2×・・・×8=40320
これをみて1×2×・・・×20等を計算させた方もいらっしゃるではないでしょうか。
ところがエラーしてしまいましたね。
これはInteger型の扱える範囲-2,147,483,648 〜 2,147,483,6472,147,483,648
をオーバーしてしまったためです。
そこで、
Module Module1
Sub Main() '私は社長だ。
Dim a As Long 'aは整数を入れる箱を用意
Dim i As Integer 'iはFor文の制御変数
a = 1 '初期化
'以下計算
For i = 1 To 20
a *= i
Next
'以上計算
Console.WriteLine("1×2×・・・ × 20={0:d}", a)
End Sub
End Module
と変更と変更すると実行結果は
1 × 2 ×・・・×20=2432902008176640000
と正しく計算できます。
ですが、これが限界です。
限界桁数の19桁に達してしまっているからです。
Long型が扱える範囲は
-9,223,372,036,854,775,808〜9,223,372,036,854,775,807
です。
因みにInteger型が4バイトであるのに対して、
Long型は8バイトのメモリ容量となります。
後の講の1つに巨大完全数探索があり、
そこでは1937桁の完全数探索をやります。
VBになりかなり大きな桁数を扱えるようになったとはいえ19桁が限界ですから、
これがいかに難しいテーマであるかおわかりでしょう。
ですが、この講義を順に読んでいけば、初心者の皆さんでも充分に組めますよ。
では次の問題を出して第3話を終了します。
@1の2乗+2の2乗+3の2乗+・・・+100の2乗
A5の3乗+7の3乗+9の3乗+・・・+31の3乗