现在的位置: 首页 > 综合 > 正文

大数相乘,含小数点哦!

2013年01月02日 ⁄ 综合 ⁄ 共 2325字 ⁄ 字号 评论关闭

///上个星期五跟BF一起做了北大的Oj,本来信心满满,第一题熟悉环境就搞了很长时间,到第二题就傻眼了,不会了哦!

///夸一下,BF立马反应出是大数相乘的问题,但是我以前看到这个类似的,没看就过了,后悔,,But哥也不会。。。。


///然后呢,某天,哥兴奋地告诉我,他在图书馆看到一个算法书,上面有这题。。。

///嘻嘻,然后,然后,然后,我就敲敲代码,过来写博客咯!!


///以上纯属家常。。。。

 

关于大数相乘的注意点:

1.两个数相乘,乘积最高位可能是n1+n2(两个数位之和) 或者 n1+n2-1  //这里不考虑乘数为0等一些意外情况

   小数点后的位数,为两个乘数的小数部分位数之和。


2.根据以上推断,若是两个带小数部分的大位乘数相乘,则先忽略小数部分,先作为整数乘,在结果中,数出小数位数,加个小点,就OK啦!


3.大数相乘的基本思想还是将字符输入的数字转化成数组,有一点要注意,字符转数字相乘时得  “x”-'0' ,

  来两个循环,开始小学时候的竖式相乘吧!


4.当转成数组时,得要反序排列,,你比如 “2355678”作为字符串输入,

  那 arr[1] 就是‘8’ ,arr[2] 就是 ‘7’  ,你问我为什么这么排,方便呗,你想想,你要是倒着排,你若果要进位往哪儿进,还得往前移一位,是不。所以呀,数组的高位可以随意是n1+n2  或是n1+n2-1 阿!


5.还有就是输出时,要注意n1+n2 位要单独判断后输出,


6.注意进位问题,这里的进位代码上,我加了详细的注释,,今天在那本书的前一节,我看到了一个更有意思的进位,下次有机会也贴出来。。。。

 



哥说,这个代码还有很多优化的地方,不过,我先不管了,贴上来再说吧!


重要部分我已经加了注释;

 


 

抱歉!评论已关闭.