大数乘法
发布时间: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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |