加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数乘法

发布时间:2020-12-14 03:03:35 所属栏目:大数据 来源:网络整理
导读:123*456先将相乘结果放置于对应位置,然后进行乘累加。ab第一次循环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
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,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读