大数乘法

123*456
先将相乘结果放置于对应位置,然后进行乘累加。
a


b

	
第一次循环
res[2+2]=a[2]*a[2]=3*6=18;
res[3]=a[2]*b[1]=3*5=15;
res[2]=a[2]*b[0]=3*4=12;

第二次循环
res[1+2]=res[3]=res[3]+a[1]*b[2]=15+12=27;
res[2]=res[2]+a[1]*b[1]=12+10=22;
res[1]=0+a[1]*b[0]=2*4=8;
第三次循环
res[2]=28
res[1]=13
res[0]=4
得到结果数组
res[]={4,13,28,27,18};
进行处理
第一趟
res[3]+=res[4]/10=27+18/10=28;
res[4]=res[4]%10=8;
第二趟
res[2]+=res[3]/10=28+28/10=30;
res[3]=res[3]%10=8;
第三趟
res[1]+=res[2]/10=13+30/10=16;
res[2]=res[2]%10=0;
第四趟
res[0]+=res[1]/10=4+16/10=5;
res[1]%=10=6;
最终:res[]={5,6,0,8,8};
顺序输出得到结果。

package com.zhiru;

public class BigDataMutiply {

	public static void bigDataMutiply(String a, String b) {

		if (a != null && b != null) {

			int aLen = a.length();
			int bLen = b.length();
			int[] res = new int[aLen + bLen];
			//先相乘.
			for(int i=aLen-1;i>=0;i--){
				for(int j=bLen-1;j>=0;j--){
					res[i+j]+=(int)(a.charAt(i)-'0')*(int)(b.charAt(j)-'0');
				}
			}
			//处理
			for(int k=aLen+bLen-2;k>=0;k--){
				if(res[k]>10){
					res[k-1]+=res[k]/10;
					res[k]%=10;
				}
			}
			for(int i=0;i<aLen+bLen-1;i++){
				System.out.print(res[i]);
			}
			
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		bigDataMutiply("123","456");
	}

}

56088
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值