面试的一道题 ,让我实现大数相乘的算法,晕倒。
package test;
import java.math.BigInteger;
public class BigNumberHandler {
public int[] a = new int[100];
public int[] b = new int[100];
public BigNumberHandler() {
initData(a);
initData(b);
print(a);
print(b);
}
private void initData(int[] t) {
for (int i = 0; i < t.length; i++) {
t[i] = (int) (Math.random() * 10);
}
}
private void print(int[] t) {
for (int i = 0; i < t.length; i++) {
System.out.print(t[t.length - i - 1]);
}
System.out.println("");
}
public void process() {
int[] result = new int[a.length + b.length];
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < b.length; j++) {
int number = b[j] * a[i];
int index = i + j;
result[index] += number;
}
}
for (int i = 0; i < result.length - 1; i++) {
int t = result[i];
if (t > 9) {
result[i + 1] += t / 10;
result[i] = t - t / 10 * 10;
}
}
print(result);
}
public static String getString(int[] t) {
StringBuffer sBuffer = new StringBuffer();
for (int i = 0; i < t.length; i++) {
sBuffer.append(t[t.length - i - 1]);
}
return sBuffer.toString();
}
public static void main(String[] args) {
BigNumberHandler t = new BigNumberHandler();
t.process();
BigInteger a = new BigInteger(getString(t.a));
BigInteger b = new BigInteger(getString(t.b));
System.out.println(a);
System.out.println(b);
System.out.println(a.multiply(b));
}
}
分享到:
相关推荐
java实现大数相乘,在不使用BigInteger工具方法的前提下进行大数相乘运算。
本程序可以求出:任意位的两个大数相乘的结果。 已经实验过>2000位的两数相乘,有兴趣的话,你也试一试吧。 support me!thanks!
大数相乘算法,java代码,包含独立大数相加算法 其中bigNumberPlus(String s1,String s2)为大数相加方法 bigNumberMultiply(String s1,String s2)为大数相乘方法
JAVA实现的两个特大整数相乘的算法,可以达到1000位数相乘。
两个大数相乘:利用数组实现,数组a存放大数1的每一位,数组b依次存放大数2的每一位。如:一大数1为3463546,则数组 a[]={3,4,6,3,5,4,6},大数2为:89019 则数组b[]={8,9,0,1,9},现在要大数1和大数2相乘,并按数位...
NULL 博文链接:https://aa00aa00.iteye.com/blog/2303318
在计算机语言中,整数最大可以设置为unsigned long类型的,但是表示有限,当涉及到两个大整数相乘的时候,会出现不能表示的情况,鉴于此编制此算法予以解决大整数相乘。本程序使用分治法实现,将n位二进制整数X和Y都...
大整数分解问题:给定两个n位长二进制数x和y,求这两个数的乘积。时间复杂性控制在Θ(n1.6)
大数乘法可以进行任意大小和精度的整数和浮点数的乘法运算, 精确度很高, 可以用作经融等领域的计算,这个是我看了一些资料, 然后自己整理实现的,简单测试了一下
包含模拟手工算大数相加、大数相乘(大数=越位的数)
通过使用分治的思想解决大数相乘的问题,资源中仅为一个java类
本文以C++语言设计了大整数类,在类中以数组存储大整数,同时借鉴分治算法思想实现了大整数的乘法运算。算法中将被乘数与乘数按照相同位数进行分组,通过对每组较小数值整数进行乘法和加法运算而得到大整数相乘的积...
华中科技大学算法实验,包含大数相乘,二分查找树,最近点对和floyd算法
为实现静态编译,易语言编译器、核心支持库、集成开发环境(IDE)等均有重大更新,支持库开发架框有扩展性调整,绝大多数官方支持库都已针对静态编译完成自身改造并提供静态库。 目前绝大多数官方支持库均已支持...