java中解决两个大整数相乘问题
众所周知,int类型的长度是一定的,而我们数字是有着很大的数,当我们想要求两个大数相乘的时候,会出现溢出.想要解决这个问题,可以把他们存放在数组里面去解决.
import java.util.Scanner;
public class BigNum {
public String Cheng(String str1,String str2) {
int num1[]=new int[str1.length()];
int num2[]=new int[str2.length()];
int result[]=new int[str1.length()+str2.length()];
//两数相乘的位数小于两数位数相加之和
for(int i=0;i<str1.length();i++) {
num1[i]=Integer.parseInt(str1.substring(i,i+1));
//截取字符串,并转化为整型
//数组下标越小,数字对应的位数越高
}
for(int i=0;i<str2.length();i++) {
num2[i]=Integer.parseInt(str2.substring(i,i+1));
//截取字符串,并转化为整型
//数组下标越小,数字对应的位数越高
}
//两数相乘
for (int i = 0; i < str1.length(); i++) {
for (int j = 0; j < str2.length(); j++) {
result[i+j]+=num1[i]*num2[j];
}
}
//进位
int temp;
//逆向存储
for(int i=result.length-1;i>0;i--) {
temp=result[i]/10;
//数组下标大的向数组下标小的进位
result[i-1]+=temp;
result[i]=result[i]%10;
}
//转化为字符串并返回
String resultString="";
for(int i=0;i<result.length-1;i++) {
resultString+=""+result[i];
}
return resultString;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数:");
String str1 = sc.next();
System.out.println("请输入第二个数:");
String str2 = sc.next();
String out=new BigNum().Cheng(str1, str2);//匿名对象调用Cheng方法
System.out.println(str1+"与"+str2+"的积为"+out);
}
}