在编程语言中实现,大数乘法,不像我们人为的计算。我们认为的计算乘法,在计算每一步的时候,都考虑进位。而在编程语言中,我们把进位的情况都放在后面处理,方便很多。总之,处理大数的问题,第一步就要考虑是用string来存放输入数据,代码如下:
public class M9_BigMul {
// 大数乘法
static String mul(String str1, String str2){
char[] s1 = str1.toCharArray();
char[] s2 = str2.toCharArray();
int n1 = s1.length, n2 = s2.length;
int[] a = new int[n1];
int[] b = new int[n2];
int[] c = new int[n1 + n2]; //注意这里是n1+n2
for(int i = 0; i < n1; i++) a[i] = s1[n1 - i - 1] - '0'; //赋值方便处理
for(int i = 0; i < n2; i++) b[i] = s2[n2 - i - 1] - '0'; //赋值方便处理
for(int i = 0; i < n1; i++){
for(int j = 0; j < n2; j++){
c[i+j] += a[i] * b[j];
}
}
for(int i = 0; i < n1 + n2 - 1; i++){
if(c[i] >= 10){
c[i+1] += c[i]/10; //进位的情况,注意这里
c[i] %= 10;
}
}
int i;
for(i = n1 + n2 - 1; i >= 0; i--) if(c[i] != 0) break;
StringBuilder sb = new StringBuilder();
for(; i >= 0; i--) sb.append( (char)(c[i] + '0')); //顺序逆转需要逆转过来,注意这里
return sb.toString();
}
}
在Java中提供了BigInteger类和BigDecimal类,分别用来处理大整数和大浮点数,我们只要调用里面提供的方法就能很方便的进行大数的四则运算,具体实现可参考:http://www.cnblogs.com/wuqianling/p/5410218.htm