您的位置:首页 > 其它

大数乘法

2014-08-29 21:23 211 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  大数相乘