改造后的代码及运行结果:
Private Sub Command1_Click()
Dim xr() As Double, a As String
a = Trim(Text1)
ReDim xr(0 To Len(a) - 1)
For i1 = 0 To Len(a) - 1
xr(i1) = Mid(a, i1 + 1, 1)
Next
Dim l As Long, le As Long, le1 As Long, n As Long, r As Long, p As Long, q As Long, m As Byte
Dim wr As Double, w1 As Double, wlr As Double, wl1 As Double, tr As Double, t1 As Double
Dim pi As Double, t As Double
Dim xi()
n = Len(a) '求数组大小,其值必须是2的幂
m = 0
l = 2
pi = 3.14159265358979
Do
l = l + l
m = m + 1
Loop Until l > n
n = l / 2
ReDim xi(n - 1)
l = 1
Do
le = 2 ^ l
le1 = le / 2
wr = 1
wi = 0
t = pi / le1
w1r = -Cos(t)
w1i = Sin(t)
r = 0
Do
p = r
Do
q = p + le1
tr = xr(q) * wr - xi(q) * wi
ti = xr(q) * wi + xi(q) * wr
xr(q) = xr(p) - tr
xi(q) = xi(p) - ti
xr(p) = xr(p) + tr
xi(p) = xi(p) + ti
p = p + le
Loop Until p > n - 1
wr = wr * w1r - wi * w1i
wi = wr * w1i + wi * w1r
r = r + 1
Loop Until r > le1 - 1
l = l + 1
Loop Until l > m
For i = 0 To n - 1 '仅输出模
xr(i) = Sqr(xr(i) ^ 2 + xi(i) ^ 2)
Text2 = Text2 & "
" & xr(i) & "+" & xi(i) & "i"
Next
End Sub
Private Sub Command2_Click()
Text1 = ""
Text2 = ""
End Sub
输入:Text1 =00070608,结果:
21+0i
5.19615242270664+3i
8.91503909477451+-1.9142135623731i
12.2115949757928+9.49264068711931i
7+0i
5.19615242270661+-2.99999999999997i
5.62840405338267+1.9142135623731i
12.2115949757928+-9.49264068711934i
与正确值比较:12.9+10.9i, 2+7i, 3.1-1.1i, 7, 3.1+1.1i, 2-7i, 12.9-10.9i, 21也是不对。
输入:Text1 =00030402,结果:
9+0i
3.46410161513776+2i
2.30993212835938+1.9142135623731i
8.1410633171952+6.3284271247462i
3+0i
3.46410161513775+-1.99999999999999i
5.08144347718889+-1.9142135623731i
8.14106331719521+-6.32842712474621i
与正确值比较:4.1+6.1i, -2+3i, -0.1-1.9i, 3, -0.1+1.9i, -2-3i, 4.1-6.1i, 9也是不对。