大数相乘:两个位数很长的数相乘(整型无法存储整型范围:(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]
结果测试: