给出只包含加、减、乘、除中一个运算符的算术等式,求该算术等式中的最小进制。如等式6*9=42,该等式中的数字均属于13进制。推算的算法是:
⑴找出等式中单个数字的最大值;
⑵从最大值加1的数制开始,按该数制的运算规则,把等式中所有数字转换成十进制数;
⑶如果等式两边的结论是成立的,那么该数制就是符合上述等式的最小数制,否则从下一个数制重新计算,直到十六进制为止。
小明为此编写了一个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
Next i
End Function
答案: 【1】9或九
【1】Asc(ch)-Asc("A")+10【2】i=max+1【3】j=j+1