首先时间复杂度应该是o(N^2)吧,所以就看你的运算位数了.
如果是10000位的话直接算应该要是10秒级别的,我测出来的大致时间是20秒.优化成每4位存成一个数计算后,运算量瞬间降下来,相当于N=2500了,1秒就能出结果.
然后10万位的优化之后我需要23秒.不知道你的方法是不是比我的要好……
程序如下:
PrivateSubForm_Load()
Dima(100000)AsLong,b(100000)AsLong,c(200000)AsLong,x&,n&,s&,i&,j&,k&,m&
Randomize
o=4'优化位数,即数组中每项保存几位数,最大可到4
n=100000'巨数的位数
s=10^o
t=no-1'相当于时间复杂度中的N
Fori=0Tot
a(i)=Int(Rnd*10)
b(i)=Int(Rnd*10)
Next
m=-1'c的有效位数
t1=Now()'开始计算
Fori=0Tot
x=0
Forj=0Tot
x=x+a(i)*b(j)
k=i
Whilex>0
Whilek>m
m=m+1
c(m)=0
Wend
c(k)=(c(k)+x)Mods
x=xs
k=k+1
Wend
Next
Next
t2=Now()'完成计算
MsgBox"用时:"&Str(Second(t2-t1))&"s"
EndSub
我这个都已经存好到数组了,要显示就把它输出成字符串就好了,而且小数和负数的话只要记个符号和小数点的位置,都不影响计算时间的啊.
输出可以用Format(a(i),"0000").
你问题里问的不是计算时间么?我就懒得加那些东西了.