teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

説明不足

2019/05/14 06:23

投稿

torisan
torisan

スコア678

answer CHANGED
@@ -1,3 +1,55 @@
1
1
  ヒントだけでも良いとの事なので置いておきます。
2
2
  なんとなく再帰処理っぽい気はするのですが……。
3
- ![イメージ説明](1cbad9615bfa53791d8a28a96a80a9f0.png)
3
+ ![イメージ説明](1cbad9615bfa53791d8a28a96a80a9f0.png)
4
+ 【追記】
5
+ 表は[4,0,1,5]とかを、4015(7進数)などに見立てて数を調べた結果です。
6
+ プログラムは以下。
7
+ ```VBA
8
+ '注意:下手にketaとかsinsuに大きな数字(10以上とか)を入れると、あっという間に固まります。
9
+ Sub Macro1()
10
+ Dim keta As Double
11
+ Dim sinsu As Double
12
+ Dim ans As Double
13
+
14
+ Dim i As Double
15
+ Dim mstr_i As String
16
+ Dim tmpsinsu As Double
17
+
18
+ keta = 3
19
+ sinsu = 4
20
+
21
+ ans = 0
22
+ i = 0
23
+ While i < sinsu ^ keta
24
+ mstr_i = S10_2(i, sinsu)
25
+ tmpsinsu = 0
26
+ mstr_i = Replace(mstr_i, "0", "") '先に0を抜いとく
27
+ While Len(mstr_i) Mod 2 = 0 And Len(mstr_i) <> 0
28
+ mstr_i = Replace(mstr_i, CStr(tmpsinsu), "")
29
+ tmpsinsu = tmpsinsu + 1
30
+ Wend
31
+ If Len(mstr_i) = 0 Then
32
+ ans = ans + 1
33
+ End If
34
+ i = i + 1
35
+ Wend
36
+
37
+ MsgBox "sinsu=" & sinsu & " keta=" & keta & " ans=" & ans
38
+ End Sub
39
+
40
+ '10進→2進
41
+ Function S10_2(X As Double, sin As Double) As String
42
+ Dim XX As Double
43
+ Dim Y As String
44
+ XX = X
45
+ If (XX < 0) Then
46
+ Y = "Error"
47
+ Else
48
+ Do
49
+ Y = XX Mod sin & Y
50
+ XX = XX \ sin
51
+ Loop While (XX > 0)
52
+ End If
53
+ S10_2 = Y
54
+ End Function
55
+ ```