みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBAにて2の100乗を計算するには

プログラミングの勉強でVBAを学んでいるものです
以下の様な問題を出されました
2の100乗の値を計算する。この値はLong型で表せる最大の値をはるかに超すので、十分な大きさのInteger型の配列を用意し、その各要素で各けたの値を表す。値を2倍するサブプロシージャ「二倍」を書いてプログラムを完成させ、値を計算せよ。

Option Explicit

Sub 二の百乗()

Const n As Integer = 200
Dim s(n) As Integer
Dim i As Integer, j As Integer

s(1) = 1
For i = 2 To UBound(s) 'UBoundは配列の最大の添え字を返す関数
s(i) = 0
Next i

For i = 1 To 100
二倍 s
Next i

For i = UBound(s) To 1 Step -1
If s(i) <> 0 Then Exit For
Next i

For j = 1 To i
Cells(1, j).Value = s(i - j + 1)
Next j

End Sub

セル一つに計算結果を表示させられないことはよく分かるのですが、そのための2の掛け算を全く思いつきません
二倍のサブプロシージャをどのようにすればいいのでしょうか

投稿日時 - 2014-12-11 14:36:52

QNo.8854688

困ってます

質問者が選んだベストアンサー

どうやっても出来ますが、たとえば筆算で計算する手順を思い出してその通りに計算してみます。

sub 二倍(s as variant)
 dim i as integer
 for i = 1 To uBound(s)
  s(i) = s(i) * 2 + (s(i - 1) \ 10)
  s(i - 1) = s(i - 1) mod 10
 next i
end sub




#参考
暗黙の宣言でoption baseがゼロになっていることに留意する。
配列の上限は十分に大きな値が宣言されている事に留意する。

投稿日時 - 2014-12-11 15:26:10

ANo.1

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

s(1) = 1となっていますからs(1)が1の位、s(2)が十の位s(3)が100の位です。
なので

s(i) = s(i) * 2 + (s(i - 1) \ 10)
s(i - 1) = s(i - 1) mod 10

ではありません。
よく間違えるところです。
十分に留意してください。

投稿日時 - 2014-12-11 16:20:32

ANo.2

2倍は各桁s(1から200)を2倍する。

>>

s(1から200)をクリアする。(これはできてる)

100回ループ i
 200回ループ j
  s(j)を2倍に

 200回ループ j
  各桁s(j)が10を超えたら s(j+1)を+1,s(j)を-10

200回ループ i(iは200から1まで)
  各桁s(i)を表示

こんなとこでcで作っています。(できました)

投稿日時 - 2014-12-11 16:00:50

あなたにオススメの質問