java中解决两个大整数相乘问题

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);
	}  
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值