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]);

}

}

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

下周继续

posted @ 2021-08-20 20:59  zrswheart  阅读(48)  评论(0编辑  收藏  举报