主题:[讨论]大数的运算
前几天,同学问我长整数的乘法问题(比如一个20位的整数乘上另一个20位的整数的精确结果),我也想不出什么高明的算法,就用数组模拟乘法的竖式运算 还凑合.
CLS
INPUT "num1,num2"; num1$, num2$ '输入数据
m = LEN(num1$): n = LEN(num2$)
DIM num(2, m + n + 2) AS INTEGER
FOR i = 0 TO m - 1 '将数值依次储藏在数组中
num(0, i) = VAL(MID$(num1$, m - i, 1))
NEXT i
FOR i = 0 TO n - 1
num(1, i) = VAL(MID$(num2$, n - i, 1))
NEXT i
FOR i = 0 TO m - 1 '依次相乘累加
FOR j = 0 TO n - 1
num(2, i + j) = num(2, i + j) + num(0, i) * num(1, j)
NEXT j
NEXT i
FOR i = 0 TO m + n '依次进位
num(2, i + 1) = num(2, i + 1) + num(2, i) \ 10
num(2, i) = num(2, i) MOD 10
NEXT i
PRINT num1$; "*"; num2$; "="; '输出结果
FOR i = m + n TO 0 STEP -1
PRINT CHR$(num(2, i) + 48);
NEXT i
PRINT
显示如下:
num1,num2? 12345,1234567
12345*1234567=0015240729615
num 0 1 2 3 4 5 6 7 8 9 10 11 12
0 5 4 3 2 1
1 7 6 5 4 3 2 1
2 5 1 6 9 2 7 0 4 2 5 1 0 0
这不又想算长整数的除法,却想不出什么好办法,望广大QB爱好者解决解决!
CLS
INPUT "num1,num2"; num1$, num2$ '输入数据
m = LEN(num1$): n = LEN(num2$)
DIM num(2, m + n + 2) AS INTEGER
FOR i = 0 TO m - 1 '将数值依次储藏在数组中
num(0, i) = VAL(MID$(num1$, m - i, 1))
NEXT i
FOR i = 0 TO n - 1
num(1, i) = VAL(MID$(num2$, n - i, 1))
NEXT i
FOR i = 0 TO m - 1 '依次相乘累加
FOR j = 0 TO n - 1
num(2, i + j) = num(2, i + j) + num(0, i) * num(1, j)
NEXT j
NEXT i
FOR i = 0 TO m + n '依次进位
num(2, i + 1) = num(2, i + 1) + num(2, i) \ 10
num(2, i) = num(2, i) MOD 10
NEXT i
PRINT num1$; "*"; num2$; "="; '输出结果
FOR i = m + n TO 0 STEP -1
PRINT CHR$(num(2, i) + 48);
NEXT i
显示如下:
num1,num2? 12345,1234567
12345*1234567=0015240729615
num 0 1 2 3 4 5 6 7 8 9 10 11 12
0 5 4 3 2 1
1 7 6 5 4 3 2 1
2 5 1 6 9 2 7 0 4 2 5 1 0 0
这不又想算长整数的除法,却想不出什么好办法,望广大QB爱好者解决解决!