算法理解——大数相乘问题

来源:互联网 发布:关闭多台linux系统脚本 编辑:程序博客网 时间:2024/05/01 01:16

腾讯今年校招的一道附加题,就是“大数相乘”问题。所谓大数相乘,就是指数字比较大,相乘的结果超出了基本类型的表示范围,所以这样的数不能够直接做乘法运算。

其实乘法运算可以分拆为两步:第一步,是将乘数与被乘数逐位相乘;第二步,将逐位相乘得到的结果,对应相加起来。这有点类似小学数学中,计算乘法时通常采用的“竖式运算”。

这里唯一要注意的便是进位问题,我们可以先不考虑进位,当所有位对应相加,产生结果之后,再考虑如果该位的数字大于10,那么我们用取余运算,在该位上只保留取余运算的结果,而将进位(通过模运算得到)累加到下一位便可。

用java简单实现了这个算法,代码如下:

public class BigNumberMulti {public static void main(String[] args) {String num1Str = "24566";String num2Str = "452053";int[] num1 = new int[num1Str.length()];int[] num2 = new int[num2Str.length()];//将字符串转换为整数数组,注意,24566应转化成{6,6,5,4,2}for(int i = 0; i < num1Str.length();i++) {num1[num1Str.length() -1- i] = num1Str.charAt(i)-'0';}for(int i = 0; i < num2Str.length();i++) {num2[num2Str.length() -1- i] = num2Str.charAt(i)-'0';}int[] result = multiply(num1, num2);for(int i = result.length-1; i>=0;i--){System.out.print(result[i]);}}public static int[] multiply(int[] num1, int[] num2) {int lengthOfNum1 = num1.length;int lengthOfNum2 = num2.length;// 分配一个空间,用来存储运算的结果,n1长的数* n2长的数,结果不会超过n1+n2长int[] result = new int[lengthOfNum1 + lengthOfNum2];// 先不考虑进位问题,根据小学竖式的乘法运算,n1的第i位与n2的第j位相乘,结果应该存放在结果的第i+j位上for (int i = 0; i < lengthOfNum1; i++) {for (int j = 0; j < lengthOfNum2; j++) {result[i + j] += num1[i] * num2[j];}}// 单独处理进位问题for (int i = 0; i < lengthOfNum1 + lengthOfNum2 -1; i++) {if (result[i] > 10) {result[i + 1] += result[i] / 10;result[i] %= 10;}}return result;}}
output:11105133998,经验证,与计算器得出的结果一致。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕四个月半月吃点就饱怎么办啊 怀孕四个月睡眠不好怎么办 二胎七个月肚子太大怎么办 上火牙疼牙龈肿怎么办 孕30周乳房胀痛怎么办 怀孕长妊娠纹了怎么办 坐久了肚子胀疼怎么办 怀孕后胖的太快怎么办 怀孕牙齿全坏了怎么办 怀孕脸胖了好多怎么办 孕晚期不爱吃肉怎么办 怀孕期间胖了怎么办啊 孕期长得太胖怎么办 狗吃马肉脸肿了怎么办 狗过敏了脸肿了怎么办 孕初期外阴很痒怎么办 怀孕了吃了田鸡怎么办 孕妇睡眠质量差怎么办吃什么 39周2天了还不生怎么办 孕中期体重猛长怎么办 4个半月胎位不正怎么办 41周不产生宫缩怎么办 生完孩子胎盘没有脱落怎么办 39周还是臀位怎么办 怀孕7个月胎位不正怎么办 怀孕六个多月胎位不正怎么办 怀孕七个月了胎位不正怎么办 怀孕七个月胎位不正怎么办 怀孕肚子上有妊娠纹怎么办 怀孕九个月肚子长痱子怎么办 怀孕前体重偏胖怎么办 怀孕打胰岛素血糖控制不好怎么办 孕后期憋的难受怎么办 怀孕6个月不想生怎么办 孕六个月不想要怎么办 怀孕9个月喝酒了怎么办 怀孕8个月喝醉了怎么办 怀孕6个月胃酸烧心怎么办 怀孕7个月胃酸怎么办 怀孕5个月胃酸怎么办 怀孕2个月胃酸怎么办