大数相乘


思路:两个数相乘最多有length1+length2 位  第i位*第j位所得的数的个位数一定落在第i+j位  如果这个数超过了10 就往第i+j+1上进位

package testPackage;

public class Big {
	public static int[] stringtoArray(String str){
		int length=str.length();
		int[] arr=new int[length];
		for(int i=0;i<length;i++){
			arr[length-i-1]=Integer.parseInt(str.substring(i, i+1));//反序输出,方便位数计算
		}
		return arr;
	} 
	public static int[] cheng(int[] arr1,int[] arr2){
		int length1=arr1.length;
		int length2=arr2.length;
		int[] sum=new int[length1+length2];
		for(int i=0;i<length1;i++){
			for(int j=0;j<length2;j++){
				//模仿乘法运算过程
				int t=sum[i+j]+arr1[i]*arr2[j];
				sum[i+j]=t%10;
				sum[i+j+1]=sum[i+j+1]+t/10;
			}
		}
		return sum;
		
	}
	public static void main(String[] args) {
		String str="72106547548473106236 982161082972751393";
		//String str = "121 30";
		String[] strr=str.split(" ");
		int[] arr1=stringtoArray(strr[0]);
		int[] arr2=stringtoArray(strr[1]);
		/*测试String转换为整形数组 ,逆序输出
		for(int i=0;i<arr1.length;i++){
			System.out.println(arr1[i]);
		}
		*/
		for(int i=0;i<=arr1.length-1;i++){
			System.out.print(arr1[i]);
		}
		System.out.println();
		for(int i=0;i<=arr2.length-1;i++){
			System.out.print(arr2[i]);
		}
		System.out.println();
		int[] sum=cheng(arr1,arr2);
		int len = sum.length-1;
		//两个数相乘有可能达不到length1+length2位 所以前面的数字就是0 找到第一个不是0的位置 然后开始输出
		for(int i=sum.length-1;i>=0;i--){
			if(sum[i]!=0) {
				len = i;
				break;
			}
		}
		for(int i=len;i>=0;i--){
			System.out.print(sum[i]);
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值