大数乘法
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
相关文章推荐
- 大数乘法
- 大数乘法
- Product(大数乘法)
- 【模版】大数乘法、加法模版
- java大数乘法的简单实现 浮点数乘法运算
- 大数乘法
- 梅森素数(Mersenne prime)判断, FFT 大数乘法 (非递归), O(n^2 log n), c++
- 模拟乘法运算之N的阶乘(大数阶乘)
- 蓝桥杯考试 分治法 大数乘法
- 第三届蓝桥杯C++组 大数乘法
- HDU1402:A * B Problem Plus(FFT与大数乘法)
- VIJOS 1040大数乘法
- <模板> Hdu 1402 A * B Problem Plus 大数乘法
- NEU-1574-A*B-大数乘法(FFT)
- Product(大数乘法模板)
- 大数乘法
- C/C++编程小练习 大数乘法之浮点大数乘法算法
- 大数乘法
- 算法提高 P1001 (大数乘法)
- 大数乘法