数学中国

 找回密码
 注册
搜索
热搜: 活动 交友 discuz
楼主: ysr

[原创]大整数的乘法

[复制链接]
 楼主| 发表于 2012-4-8 13:57 | 显示全部楼层

[原创]大整数的乘法

不能乘小数和有符号的数
 楼主| 发表于 2012-4-8 20:45 | 显示全部楼层

[原创]大整数的乘法

我从网上复制了大数的+-*/和开方的代码,无法调用,我的程序要用大数,无法运行代码,显示用户类型未定义,无结束语句等,如何做?唯一能运行的是上面的乘法和除法!
VB呀,累人,今天无法学下去了!
 楼主| 发表于 2012-4-17 23:38 | 显示全部楼层

[原创]大整数的乘法

大数乘法还可以这样做:
Private Sub Command1_Click()
D1 = Text1.Text
D2 = Text2.Text
Text3.Text = MPC(Text1.Text, Text2.Text)
End Sub
Public Function MPC(D1 As String, D2 As String) As String
Dim X, Y ';两数长度
X = Len(D1) \ 4: Y = Len(D2) \ 4
If Len(D1) Mod 4 = 0 Then
X = X
Else
X = X + 1
If Len(D2) Mod 4 = 0 Then
Y = Y
Else
Y = Y + 1
  End If
End If
D3 = String(4 * X - Len(D1), "0") & D1
D4 = String(4 * Y - Len(D2), "0") & D2
Dim A() As String
ReDim A(4 To 4 * X + 4 * Y, 4 To 4 * Y)
Dim I, J, C1, C2, CJ, JW, s, t
For J = 4 * Y To 4 Step -4 ';D2
JW = 0 ';进位清0
C2 = Mid$(D4, J - 3, 4) ';每位数
For I = 4 * X To 4 Step -4 ';D1
  C1 = Mid$(D3, I - 3, 4) ';每位数
  CJ = Val(C1) * Val(C2) + JW ';计算乘积
  C = I + J: R = 4 * Y + 4 - J
  A(C, R) = String(4 - Len(CJ Mod 10000), "0") & CJ Mod 10000 ';本位
  JW = CJ \ 10000 ';进位
Next
A(C - 4, R) = JW
Next
Dim B() As String
ReDim B(1 To X + Y)
JW = 0
For s = X + Y To 1 Step -1
Bit = JW
For t = 1 To Y
  Bit = Bit + Val(A(4 * s, 4 * t))
Next
B(s) = String(4 - Len(Bit Mod 10000), "0") & Bit Mod 10000
JW = Bit \ 10000
Next
If B(1) > 0 Then
MPC = MPC & B(1)
Else
MPC = MPC
End If
For s = 2 To X + Y
MPC = MPC & B(s)
Next
End Function
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
实验:
被乘数12345,
乘数12345,
积000152399025,
只是结果是字符串首端有0,
如何弄?
希望大侠帮忙解决!
 楼主| 发表于 2012-4-18 20:55 | 显示全部楼层

[原创]大整数的乘法

哈,这会改过来了,学精通不易,学会几条语句还是不难,当你搞通一条语句时,不是很快乐吗?你会觉得好玩!楼上yehe老师的中间缺0的问题解决了,就是把数组变量声明为字符,计算数值补够0,就是这个Dim A() As String
和A(C, R) = String(4 - Len(CJ Mod 10000), "0") & CJ Mod 10000 ';本位这个
程序如下
Private Sub Command1_Click()
D1 = Text1.Text
D2 = Text2.Text
Text3.Text = MbC(Text1.Text, Text2.Text)
End Sub
Public Function MbC(D1 As String, D2 As String) As String
Dim X, Y ';两数长度
X = Len(D1) \ 4: Y = Len(D2) \ 4
If Len(D1) Mod 4 = 0 Then
X = X
Else
X = X + 1
If Len(D2) Mod 4 = 0 Then
Y = Y
Else
Y = Y + 1
End If
End If
D3 = String(4 * X - Len(D1), "0") & D1
D4 = String(4 * Y - Len(D2), "0") & D2
Dim A() As String
ReDim A(4 To 4 * X + 4 * Y, 4 To 4 * Y)
Dim I, J, C1, C2, CJ, JW, s, t
For J = 4 * Y To 4 Step -4 ';D2
JW = 0 ';进位清0
C2 = Mid$(D4, J - 3, 4) ';每位数
For I = 4 * X To 4 Step -4 ';D1
C1 = Mid$(D3, I - 3, 4) ';每位数
CJ = Val(C1) * Val(C2) + JW ';计算乘积
C = I + J: R = 4 * Y + 4 - J
A(C, R) = String(4 - Len(CJ Mod 10000), "0") & CJ Mod 10000 ';本位
JW = CJ \ 10000 ';进位
Next
A(C - 4, R) = JW
Next
Dim B() As String
ReDim B(1 To X + Y)
JW = 0
For s = X + Y To 1 Step -1
Bit = JW
For t = 1 To Y
Bit = Bit + Val(A(4 * s, 4 * t))
Next
B(s) = String(4 - Len(Bit Mod 10000), "0") & Bit Mod 10000
JW = Bit \ 10000
Next
If B(1) > 0 Then
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6) & B(1)
Else
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6)
End If
For s = 2 To X + Y
MbC = Val(Left(MbC, 5)) & Mid(MbC, 6) & B(s)
Next
End Function
Private Sub Command2_Click()
Text1.Text = ""
Text2.Text = ""
Text3.Text = ""
End Sub
实验
乘数1000001
乘数3
积3000003
 楼主| 发表于 2014-2-20 13:12 | 显示全部楼层

[原创]大整数的乘法

如何做 快速版的,超大整数的 乘法?
 楼主| 发表于 2014-2-21 12:24 | 显示全部楼层

[原创]大整数的乘法

研究超大数据没有程序帮助不行,学习VB吧:
http://study.qqcf.com/sort/163/2/
发表于 2014-2-21 12:29 | 显示全部楼层

[原创]大整数的乘法

前几年我试做过用 VB 编写的大数四则运算,不限于整数。今天看来好像没有什么用处,原因应该是编程水平不高吧。
 楼主| 发表于 2014-2-23 18:08 | 显示全部楼层

[原创]大整数的乘法

谢谢天山草老师的帮助!您的程序对初学者是最好的学习资料,我的除法程序是从你的学来的,但计算超大数据还有许多困难要解决,还要学习更多技术,希望帮助!
 楼主| 发表于 2014-2-23 18:52 | 显示全部楼层

[原创]大整数的乘法

绘制函数图的VB程序:
http://hi.baidu.com/100bd/item/c929efc746e87656ad00efbb
 楼主| 发表于 2014-2-23 19:05 | 显示全部楼层

[原创]大整数的乘法


是计时程序,如下为代码来源:
http://wenda.so.com/q/1369552198068025

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|数学中国 ( 京ICP备05040119号 )

GMT+8, 2024-4-25 21:19 , Processed in 0.066406 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表