给定两个大于15位以上的大整数,请使用任意一种编程语言,实现两个大整数的乘法运算(不得使用语言或框架内置提供的大数乘法API)。
/** * 解题思路: * 数字太大,所以用字符串来表示,先都翻转一下,这样更好计算,然后通过第一个字符串中的每一位来乘 * 第二个字符串的每一位,第一个字符串的第i位(从0开始)是i+1位数,第二个字符串的第 * j位是(j+1)位数,相乘应该是i+j+1位数或是i+j+2位数,可以当成是i+j+1位数(可以以后再进位),这样 * 计算的时候把计算的数值就可以都加到arr数组的第i+j的位置中。最后再来一个进位计算和数字反转就可以了。 */ public class BigDecimal { public String calculate(String a,String b){ StringBuilder aa=new StringBuilder(a); StringBuilder bb=new StringBuilder(b); aa.reverse(); bb.reverse(); int m=aa.length(); int n=bb.length(); int[] arr=new int[m+n]; for(int i=0;i<m;i++){ for(int j=0;j<n;j++){ arr[i+j]=(aa.charAt(i)-'0')*(bb.charAt(j)-'0'); } } for(int i=0;i<arr.length-1;i++){ //进位 arr[i+1]+=arr[i]/10; arr[i]%=10; } StringBuilder result=new StringBuilder(); for(int i=0;i<arr.length-1;i++){ result.append(arr[i]); } return result.reverse().toString(); } public static void main(String[]args){ BigDecimal bigDecimal=new BigDecimal(); String result=bigDecimal.calculate("123456789012345","1234567879012345"); System.out.println(result); } }
function multipy(a, b) { let num1 = a.toString().split(''); let num2 = b.toString().split(''); let len1 = num1.length; let len2 = num2.length; let ans = []; for (let i = len1 - 1; i >= 0; i--) { for (let j = len2 - 1; j >= 0; j--) { let index1 = i + j; let index2 = i + j + 1; let mul = num1[i] * num2[j] + (ans[index2] || 0); ans[index1] = Math.floor(mul / 10) + (ans[index1] || 0); ans[index2] = mul % 10; } } let result = ans.join(''); console.log('结果:' + result === 0 ? '0' : result.replace(/^0+/, '')); } multipy(12, 16); // 192