有2个很大的数相乘(大到目前的数字无法表示的数),求实现思想

jhdxhj 2011-03-02 10:45:38
有2个很大的数相乘(大到目前的数字无法表示的数),求实现思想
...全文
90 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
heidi784060468 2011-11-25
用数组的话是蛮力算法,不是优解。最好的是用分而治之法,基本思想是给定X和Y都是n位整数,计算乘积XY。分治算法思想,将n位X和Y分成2段,每段n/2位。则X分为AB两段,Y分为CD两段。
回复
qiudong_5210 2011-03-03
难道是 -∞*∞
回复
vrhero 2011-03-03
[Quote=引用 7 楼 bluceyoung 的回复:]
难道8个字节的ulong都存不下?

那你就分解一下,比如1234000*4567,可以分解成1234*4567*1000,然后就只算前两个数相乘,就像科学计数法似的
[/Quote]
8个字节的整数才多大?太小了...在某些领域如数学、天文等简单小到可以忽略不计...

.NET 4.0的System.Numerics.BigInteger结构表示无固定长度的任意大的有符号整数,只受内存限制...但其实它的原理仍然是字节数组存储,乘法是分治法转换为加法...

不过“目前的数字无法表示的数”是不存在的...数学上有“无限大”,没有“无法表示”...
回复
hztltgg 2011-03-03
xxxxx
X yyyyy
--------
aaaaa 一个个集合
aaaaa0
aaaaa00
.......
--------
bbbbbbb 集合的同一位置相加

小学教乘法的时候不就是这样做么,如果其中的一个数xxx很小,用一个整数能表示的话,就更简单了


回复
TeacherYoung 2011-03-03
难道8个字节的ulong都存不下?

那你就分解一下,比如1234000*4567,可以分解成1234*4567*1000,然后就只算前两个数相乘,就像科学计数法似的
回复
PitTroll 2011-03-02
大整数相乘,大学算法中学过的,俺都忘的差不多了。好像用分治法可以解决的吧。
回复
jhdxhj 2011-03-02
[Quote=引用 3 楼 whb147 的回复:]
一般都是用数组,或者集合之类的存储数据
我去年去掌上通面试的时候就问的这个,
[/Quote]
能否说的详细点呢?
回复
whb147 2011-03-02
一般都是用数组,或者集合之类的存储数据
我去年去掌上通面试的时候就问的这个,
回复
hahanyang 2011-03-02
考虑下转成List或数组,循环运算后在数组中输出
回复
打酱油的 2011-03-02
直接A*B算不出?
回复
相关推荐
发帖
非技术区
创建于2007-09-28

7698

社区成员

.NET技术 非技术区
申请成为版主
帖子事件
创建了帖子
2011-03-02 10:45
社区公告
暂无公告