1532: 高精度练习之乘法

来源:互联网 发布:产品防伪码制作软件 编辑:程序博客网 时间:2024/05/20 00:36

这里写图片描述
链接在这儿

A和B的位数不超过500位!!天哪,这该怎么办,即使用unsigned  long  long最多也只有20位。

写题要看标题啊,兄dei!高精度乘法

高精度乘法又可称为大数乘法,此时我们就不能抱着惯性思维去用整型存储这两个数。

我们只能抱string的大腿了(抱紧)

我们先声明两个字符串变量str1,str2存储输入的数字、两个长达500的数组a[ ],b[ ]和一个长达1000的数组ans[  ]来存储最终的结果。
//为什么长度是1000?很简单,一个m位数乘一个n位数,结果只可能是m+n或m+n-1或m+n-2位数。

然后把两个字符串一位一位拆解,然后逆序存储在相应的数组中。
//逆序的原因是为了计算方便。
//注意字符型到整型的转化!!

开始计算啦
我们应用乘法原理,用一个乘数的1...n位分别乘另一个乘数的1...m位,并将结果存入合适的位置。
//合适的位置在哪呢?你自己找吧嘿嘿嘿
每一次相乘时,得到的是未进位的结果。满十进位,所以ans[i+1]=ans[i]/10;同时ans[i]%=10;
此时我们得到了最终的结果,但数字的顺序是倒着的,所以我们要逆序输出即可。
且慢
最终倒过来的结果开头的数可能会有0,所以还需进一步处理,取开头不为0的那一位开始输出,这里可以用一个while循环,找出不为0的那个数的索引值,然后开始输出即可。

是不是很简单呢,hhhhh

学会了这个,你就可以编写一个异常生猛的计算器了,再大的数字也不用担心啦!

原创粉丝点击