[Visual Basic]高精度算法

不大明白为什么今天的信息作业是抄代码……就又来写博客了
本文主要整理高精度加减乘除及其优化的模板,不做过多解释

高精度加法

Private Sub Command1_Click()
Dim a(1 To 100) As Integer, b(1 To 100) As Integer, c(1 To 101) As Integer
Dim s1 As String, s2 As String,s as string
Dim max As Integer, la As Integer, lb As Integer, i As Integer
s1 = Text1.Text : s2 = Text2.Text
la = Len(s1) : lb = Len(s2)
If la > lb Then max = la Else max =lb 
For i = 1 To la
a(i) = Val(Mid(s1,la-i+1,1))
Next i
For i = 1 To lb
b(i) =Val(Mid(s2,lb-i+1,1))  '1
Next i

For i = 1 To max
c(i) =a(i)+b(i)  '2
Next i
For i = 1 To max
c(i + 1) =c(i+1)+c(i)\10  '3
c(i) = c(i) Mod 10  '4
Next i

If c(max + 1) <> 0 Then  max=max+1  '5
s = ""
For i = max To 1 Step -1
s = s + Str(c(i))
Next i
Text3.Text = s
End Sub
Private Sub Command2_Click()
Text1.Text = "":Text2.Text = "":Text3.Text = ""
End Sub

优化

'从低位到高位逐位相加的过程中,边计算边进位
For i = 1 To max
    c(i + 1)=(c(i) + a(i) + b(i)) \ 10
    c(i) =(c(i) + a(i) + b(i)) Mod 10
Next i

'计算结果直接存储在数组a中(即a=a+b),不再定义数组c
For i = 1 To max
    a(i + 1) =  a(i + 1) + (a(i) + b(i)) \ 10                
    a(i) =  (a(i) + b(i)) Mod 10                     
Next i

学生党要上网课了……有时间就继续更8

猜你喜欢

转载自www.cnblogs.com/lsqwq/p/HighPrecision.html