大数相乘:两个位数很长的数相乘(整型无法存储整型范围:(0x80000000<=x<=0x7fffffff));
求解步骤:
在牛客网上看到的此题:思路用两个整型数组模拟两个数的乘法过程:被乘数a,乘数b,结果result:
1、首先初始化一个长度为a.length+b.length的数组用来存放结果。
2、为了便于计算将整型数组a和b高位和地位进行置换,例如:a={1,2,3,4,5,6},置换后a={6,5,4,3,2,1}
3、根据两个数相乘进位的思想进行编程:a[i]*b[j]相乘放在result[i+j]中;举个例子:
a=23,b=18,置换后,a={3,2},b{8,1};
4、对得到的初步result数组进行进位处理,24向上进位2,然后19变为21;21在向上进位2,2变为4;所以result最终结果为:
result={4,1,4}。
5、对result进行高位和地位置换输出:414(抱歉,举得例子结果对称的,看不出效果,大家可以自己举个例子试试)
代码:
package com.renhq.bignumbermut;import java.util.Scanner;public class BigNumberMul{ public int[] a;//被乘数 public int[] b;//乘数 public int[] result;//结果 public static void main(String[] args){ String a,b; Scanner s =new Scanner(System.in); a = s.next(); b = s.next(); BigNumberMul bm = new BigNumberMul(a,b); bm.bigMul(); } public BigNumberMul(){ } public BigNumberMul(String a,String b){ toStrings(a,b); } public void toStrings(String sa,String sb){//将乘数转换为两个字符数组,初始化结果数组,高位与地位对应 char[] ca=sa.toCharArray(); char[] cb=sb.toCharArray(); a = new int[ca.length]; b = new int[cb.length]; for(int i=ca.length-1,j=0;i>=0;i--,j++){ a[j]=ca[i]-'0'; } for(int i=cb.length-1,j=0;i>=0;i--,j++){ b[j]=cb[i]-'0'; } result = new int[a.length+b.length]; } public void bigMul(){ for(int i=0;i<a.length;i++){//将a的i位上的数依次乘以b的各个位上的数然后保存在i+j的位置上 for(int j=0;j<b.length;j++){ result[i+j]+=a[i]*b[j]; } } int jinwei=0; for(int i=0;i<result.length;i++){//处理进位 result[i]+=jinwei; jinwei=result[i]/10; result[i]=result[i]%10; } int flag=0; for(int i=result.length-1;i>=0;i--){//输出结果。高位的0不输出 if(flag!=0||result[i]!=0){ if(flag==0)flag++; System.out.print(result[i]
结果测试: