1. 程式人生 > 其它 >Day39---學習Java第二彈

Day39---學習Java第二彈

2021-08-20

java 兩個大數相乘_Java大數相乘

1.BigInteger和BigDecimal2.大數相乘的題3.陣列實現大數相加

1.BigInteger和BigDecimal

在 Java 中提供了用於大數字運算的類,即 java.math.BigInteger 類和 java.math.BigDecimal 類。

這兩個類用於高精度計算,其中 BigInteger 類是針對整型大數字的處理類,而 BigDecimal 類是針對大小數的處理類。

在運算中 BigInteger 型別可以準確地表示任何大小的整數值,它可以表示的範圍比integer大得多了。 BigInteger類的常用運算方法:

add(BigInteger val) 做加法運算

subtract(BigInteger val) 做減法運算

multiply(BigInteger val) 做乘法運算

divide(BigInteger val) 做除法運算

remainder(BigInteger val) 做取餘數運算

divideAndRemainder(BigInteger val) 做除法運算,返回陣列的第一個值為商,第二個值為餘數

pow(int exponent) 做引數的 exponent 次方運算

negate() 取相反數

shiftLeft(int n) 將數字左移 n 位,如果 n 為負數,則做右移操作

shiftRight(int n) 將數字右移 n 位,如果 n 為負數,則做左移操作

and(BigInteger val) 做與運算

or(BigInteger val) 做或運算

compareTo(BigInteger val) 做數字的比較運算

equals(Object obj) 當引數 obj 是 Biglnteger 型別的數字並且數值相等時返回 true, 其他返回 false

min(BigInteger val) 返回較小的數值

max(BigInteger val) 返回較大的數值

BigDecimal類可以精確的進行計算,在計算中由於浮點數float和double本身儲存的關係不能做到完全的準確

,因此在商業應用中BigDecimal可以提供精確得到小數計算。 資料:Java BigDecimal詳解

2.大數相乘的題

import java.math.BigInteger;

import java.util.*;

class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

BigInteger a =input.nextBigInteger();

BigInteger b =input.nextBigInteger();

long c = input.nextLong();

BigInteger fin = a.multiply(b);

BigInteger ten = new BigInteger("10");

BigInteger zero = new BigInteger("0");

int count = 0;

while(fin.remainder(ten).equals(zero)) {
count++;

fin = fin.divide(ten);

}

if(count==c) {
System.out.println("Well done!");

}else {
System.out.println("Doubt!");

}

}

}

3.陣列實現大數相加

大數a+b(範圍是1到10E200)

import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);

int[] a = new int[202];

int[] b = new int[202];

int[] c = new int[202];

String stra = input.next();

String strb = input.next();

for(int i=0;i

a[i] = stra.charAt(stra.length()-1-i)-'0';

}

for(int i=0;i

b[i] = strb.charAt(strb.length()-1-i)-'0';

}

int k=0,j=0;

for(int i=0;i<202;i++) {
k = a[i]+b[i]+j;

j = k/10;

c[i] = k%10;

}

int t;//從後往前把數組裡空的排除掉,找到開始有數的位置

for(int i=c.length-1;i>=0;i--) {
if(c[i]!=0) {
t=i;

break;

}

}

for(int i=t;i>=0;i--){
System.out.print(c[i]);

}

}

}
--------------------------------------------------------------------------------------------------

下週繼續