本文目錄一覽:
- 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說的這種計算在實際應用中是常用的.特別是在加密、解密過程中。這個問題的本身就是一個很大的課題。單純用傳統的方式會由於溢出而導致計算結果不正確。目前,針對這一應用,市面上、開源軟體中都有一些針對這種運算的函數數,稱作大數運算庫。我們如果只是為了寫應用,而不研究數值計算的話,直接採用這些庫就行了。具體的大數運算的庫可以上網搜一下。提供一個大數運算的示常式序:
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/158908.html