本文目录一览:
- 1、JAVA 如何用一维数组自己写一个大数乘法
- 2、JAVA 大数阶乘,不用biginteger怎么做
- 3、java 很长的大数 如何用String 相加,相乘?
- 4、如何在JAVA中,输入两个很大的数字使他们相乘后,得到正确结果结果?
JAVA 如何用一维数组自己写一个大数乘法
给你个大数计算的例子
import java.math.BigInteger;
public class Admin {
public static void main(String... args) {
BigInteger a = BigInteger.valueOf(Long.MAX_VALUE);
BigInteger b = BigInteger.valueOf(Long.MAX_VALUE);
System.out.println(a);
System.out.println(b);
// 加
System.out.println(a.add(b));
// 减
System.out.println(a.subtract(b));
// 乘
System.out.println(a.multiply(b));
// 除
System.out.println(a.divide(b));
}
}
JAVA 大数阶乘,不用biginteger怎么做
字符串效率很低
用数组来做效率高很多
下面是求1000项的Fibonaci数列,你参考下改成求阶乘也一样
public class Fibonacci
{
private static final int MAX_LENGTH = 1000000;
private static int[] a;
private static int[] b;
private final static int LEN = 1000000000;
private static int carry = 1;
public static void main(String[] args)
{
a = new int[MAX_LENGTH];
b = new int[MAX_LENGTH];
a[0] = 1;
b[0] = 1;
double begin = System.currentTimeMillis();
for(int i = 0; i 1000; i++)
{
addToA();
addToB();
}
display(b);
double end = System.currentTimeMillis();
System.out.println("Time:" + (end - begin) / 1000);
}
public static void addToA()
{
int carryNum = 0;
for(int i = 0; i carry; i++)
{
carryNum = (a[i] + b[i]) / LEN;
a[i] = (a[i] + b[i]) % LEN;
a[i+1] += carryNum;
}
if(carryNum == 1)
{
carry++;
}
}
public static void addToB()
{
int carryNum = 0;
for(int i = 0; i carry; i++)
{
carryNum = (b[i] + a[i]) / LEN;
b[i] = (b[i] + a[i]) % LEN;
b[i+1] += carryNum;
}
if(carryNum == 1)
{
carry++;
}
}
public static void display(int[] n)
{
for(int i = carry - 1; i = 0; i--)
{
System.out.print(n[i]);
}
System.out.println();
}
}
java 很长的大数 如何用String 相加,相乘?
相加比较简单,用单层循环就能实现。进位的话因为加法只存在进1和不进两种情况,用一个boolean型标记一下就能实现。
相乘的有难度。
如何在JAVA中,输入两个很大的数字使他们相乘后,得到正确结果结果?
像LZ说的这种计算在实际应用中是常用的.特别是在加密、解密过程中。这个问题的本身就是一个很大的课题。单纯用传统的方式会由于溢出而导致计算结果不正确。目前,针对这一应用,市面上、开源软件中都有一些针对这种运算的函数数,称作大数运算库。我们如果只是为了写应用,而不研究数值计算的话,直接采用这些库就行了。具体的大数运算的库可以上网搜一下。提供一个大数运算的示例程序: