大整数数相乘的问题

来源:互联网 发布:优品会展软件 编辑:程序博客网 时间:2024/06/05 05:52
Do overflow manually.
final static long mask = (1 << 31) - 1;
ArrayList<Integer> multiply(ArrayList <Integer> a, ArrayList<Integer> b) {
  ArrayList<Integer> result = new ArrayList<Integer>(a.size()*b.size()+1);
  for (int i=0; i<a.size(); i++) {
    multiply(b, a.get(i), i, result);
  }
  return result;
}
void multiply(ArrayList<Integer> x, int a, int base, ArrayList<Integer> result) {
  if (a == 0) return;
  long overflow = 0;
  int i;
  for (i=0; i<x.size(); i++) {
    long tmp = x.get(i) * a + result.get(base+i) + overflow;
    result.set(base+i, (int)(mask & tmp));
    overflow = (tmp >> 31);
  }
  while (overflow != 0) {
    long tmp = result.get(base+i) + overflow;
    result.set(base+i, (int) (mask & tmp));
    overflow = (tmp >> 31);
  }
}

原创粉丝点击