大整数数相乘的问题
来源:互联网 发布:优品会展软件 编辑:程序博客网 时间: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);
}
}
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);
}
}
- 大整数数相乘的问题
- 大整数数相乘的问题
- 87 1 大整数数相乘的问题
- 大整数相乘的问题
- 大整数相乘问题
- 大整数相乘问题
- 大整数数相乘的一个解决方案(附c# 代码)
- 大整数数相乘的一个解决方案(附c# 代码)
- 大整数数相加和相乘
- 分治法的经典问题——大整数相乘
- 分治法的经典问题——大整数相乘
- 分治法的经典问题——大整数相乘
- 分治法的经典问题——大整数相乘
- 分治法的经典问题——大整数相乘
- 分治法的经典问题——大整数相乘
- 分治算法之大整数相乘问题
- 一个大整数相乘算法的例子
- 大整数相乘算法
- EL————基础
- Principles behind the Agile Manifesto
- 使用ffmpeg获取一帧摄像头数据
- 股票交易类-20121112 日评
- C++与java区别
- 大整数数相乘的问题
- [C++学习笔记]链表应用2约瑟夫环问题
- cocos2d-x 图层触摸事件处理onTouch-沈大海cocos2d-x教程8
- SMB配置
- MYSQL的primary key和unique key的区别
- 24中设计模式+1的定义以及使用场合
- 64位虚拟机编译android出错的解决方法
- matlab [] 和kernel归一化
- 软件开发中常见的十大系统瓶颈