JAVA写大数运算问题

博客介绍了大数用字符串存储的基本声明、运算方法,包括加、减、乘、除、取模、幂运算等,还提及大数比较方法。同时强调做除法或取模运算时不能除以0,两个负数无法取模,且BigDecimal支持任意类型运算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

既然是大数,那么就要用字符串来存储:

import java.util.Scanner;

Scanner in = new Scanner(System.in);

String u = in.next();  //输入两个字符串
String v = in.next();

基本声明

import java.math.BigDecimal; //声明一个浮点数大数类
import java.math.BigInteger; //声明一个整型大数类

BigDecimal a = new BigDecimal(1); //定义一个大数a,并赋值1

BigInteger a = in.nextBigInteger();// 定义并输入a

BigDecimal a[]; //定义一个大数数组

while(in.hasNext()) { //多组输入
       ;
}


if(c.compareTo(BigDecimal.ZERO) == 0) //去除后到0
	System.out.println("0");
else
	System.out.println(c.stripTrailingZeros().toPlainString());

或者直接定义:

String a = "12345678";
String b = "23456788888";

将字符串转化成大数类型

java.math.BigInteger a2 = new java.math.BigInteger(a);
java.math.BigInteger b2 = new java.math.BigInteger(b);

加法 a+b:

java.math.BigInteger a3=a2.add(b2);

减法 a-b:

java.math.BigInteger a3=a2.subtract(b2);

乘法 a*b:

java.math.BigInteger a3=a2.multiply(b2);

除法:a/b:

java.math.BigInteger a3=a2.divide(b2);

取模  a%b

java.math.BigInteger a3=a2.mod(b2);

幂运算 a^b  (b为int型)

java.math.BigInteger a3=a2.pow(b);

返回最大值:

java.math.BigInteger a3=a2.max(b2);

左移n位 (n位int型,如果位负数相当于右移)

java.math.BigInteger a3=a2.shiftLeft(n);

右移n位 同理:

java.math.BigInteger a3=a2.shiftRight(n);

比较大小:(返回值为int型 1 , 0,-1)

int a3 = a2.compareTo(b2);

类型转换:

int  b3 = a3.intValue();

大数比较


import java.math.*;
import java.util.*;
public class Main {
    public static void main(String []args){
        Scanner cin = new Scanner (System.in);
        BigInteger a,b,c,d;
        a=cin.nextBigInteger();
        b=cin.nextBigInteger();
        c=cin.nextBigInteger();
        d=cin.nextBigInteger();
        if(a.compareTo(b)<0)//此时由于a<b,则返回值小于0;
        {
            System.out.println("a<b");
        }
        if(b.equals(c))//此时由于b==c,则返回值等于0;
        {
            System.out.println("b==c");
        }
        if(d.compareTo(c)>0)//此时由于d>c,则返回值大于0;  
        {
            System.out.println("d>c");
        }
    }
}

在做 除法 或者 取模 运算的时候注意不要(n/0 或n%0),两个负数无法取模。同时 BigDecimal 支持任意类型的运算。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值