给出只包含加、减、乘、除中一个运算符的算术等式,求该算术等式中的最小进制。如等式6*9=42,该等式中的数字均属于13进制。推算的算法是:
1)找出等式中单个数字的最大值;
2)从最大值加1的数制开始,按该数制的运算规则,把等式中所有数字转换成十进制数;
3)如果等式两边的结论是成立的,那么该数制就是符合上述等式的最小数制,否则从下一个数制重新计算,直到十六进制为止。
小明为此编写了一个VB程序,程序运行时,在文本框Text1中输入一个等式,单击“计算”按钮Command1,在文本框Text2中显示该等式中数字所属的数制。程序运行界面如下图所示。
(1)
根据上述算法,则等式“5+7=13”成立,则该等式中的数属于进制数。
(2)
实现上述功能的VB程序如下,请在划线处填入合适的代码。
Private
Sub Command1_Click()
Dim
s1 As String, ysf As String, t1 As String, t2 As String, t3 As String
Dim
ch As String, t As String, max As Integer, jz As Integer, i As Integer
s1=Text1.Text
t1=0:
max=0
For
i=1 To Len(s1)
ch=Mid(s1,
i, 1)
If
ch=“+” Or ch=“-” Or ch=“*” Or ch=“\\” Then
ysf=ch: t1=t: t=“ ”
ElseIf
ch=“=” Then
t2=t: t=“ ”
ElseIf
ch >= “A” And ch <= “F” Then
t=t+ch
temp=
If max < temp Then max=temp
Else
t=t+ch
If max < Val(ch) Then max=Val(ch)
End
If
Next
i
t3=t:
jz=0
Do
While i <= 16
If
ysf=“+” Then
If XtoD(i, t1)+XtoD(i, t2)=XtoD(i, t3) Then
jz=i: Exit Do
ElseIf
ysf=“-” Then
If XtoD(i, t1) - XtoD(i, t2)=XtoD(i, t3)
Then jz=i: Exit Do
ElseIf
ysf=“*” Then
If XtoD(i, t1) * XtoD(i, t2)=XtoD(i, t3)
Then jz=i: Exit Do
Else
If XtoD(i, t1) / XtoD(i, t2)=XtoD(i, t3)
Then jz=i: Exit Do
End
If
i=i+1
Loop
If
jz <> 0 Then
Text2.Text=“该数属于” +Str(jz)+ “进制”
Else
Text2.Text=“没有找到合适的进制”
End
If
End
Sub
Function
XtoD(x As Integer, s As String) As Integer
Dim
j As Integer
j=0
For
i=Len(s) To 1 Step -1
XtoD=XtoD+Val(Mid(s,
i, 1)) * x ^ j
Next
i
End
Function
答案: 【1】9或九
【1】Asc(ch) - Asc(”A”)+10【2】i=max+1【3】j=j+1