一个VB计算题,算到下半部分不会算了,请朋友指教!在线等!

来源:百度知道 编辑:UC知道 时间:2024/05/15 23:55:45
Option Explicit

Private Sub Command1_Click()
Dim st As String, s As String, k As Integer
Dim p As String, num() As Integer, i As Integer, n As Integer
s = Text1
For i = 1 To Len(s)
st = Mid(s, i, 1)
If s >= "0" And st <= "9" Then
p = p & st
Else
If p <> "" Then List1.AddItem p
p = ""
End If
Next i
If p <> "" Then List1.AddItem p
ReDim num(List1.ListCount)
For i = 1 To UBound(num)
p = List1.List(i - 1)
num(i) = Val(Left(p, Len(p) - 1))
n = Val(Right(p, 1))
List2.AddItem change(num(i), n)
Next i
End Sub
Private Function change(x As Integer, y As Integer)
Dim p As Integer, k As Integer
Do
p = x Mod 10
change = change + p * y ^ k
x = x \ 10
k = k + 1
Loop Until x <= 0
End Function

在TEXT1中输入as235gh458yj后运行结果是
List1 : 235 458
List2

List2 的结果,是从List1的输出得到的.
变换过程是:
1.235拆成x=23,y=5
2.p=x mod 10=23 mod 10=3
3.change=change+p*y^k=0+3*5^0(5的0次方)=3*1=3
4.x=x\10=23/10=2.3=2(取整,有四舍五入效果,但在此列中没出现)
5.k=k+1=1
6.x>0继续DO
7.p=x mod 10=2 mod 10=2
8.change=change+p*y^k=3+2*5^1(5的1次方)=3+2*5=13
9.X=0
10.结束
所以235经过一系列无聊变换后成为了13
你可以试试用458运算,回得到37的.我算过了.

看似很复杂,其实很简单的,关键在change函数里,单步调试一下就能看出来

Private Function change(x As Integer, y As Integer)
Dim p As Integer, k As Integer
Do
p = x Mod 10 '取模(返回余数)
change = change + p * y ^ k '当前值 + p × (y的k次方)
x = x \ 10 '整除10
k = k + 1 '幂+1
Loop Until x <= 0
End Function

1、 假如我们设list1中有一个值为X:
则list2的对应项应该是:
X的十位数 × X的个位数的0次方 + X的百位数 × X的个位数的1次方 + X的千位数 × X个位数的2次方 + X的万位数 × X个位数的3次方…,
依次类推…
2、 例如235这个值,他对应的list2值应为:3 * 5^0 + 2 * 5 ^ 1 = 13
注:^ 用来求一个数