回 帖 发 新 帖 刷新版面

主题:[讨论]大数的运算

    前几天,同学问我长整数的乘法问题(比如一个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爱好者解决解决!

回复列表 (共3个回复)

沙发

去看看教材在计算机里如何实现数学运算
模拟一下就行了

板凳

VB5.0里有个"浮点型"变量,6。0没了

3 楼

楼上乱说,现在的语言会连浮点都没有吗?你自己打打这个:
Dim a As Single
Dim b As Double

我来回复

您尚未登录,请登录后再回复。点此登录或注册