Acwing---791. 高精度加法(减、乘、除、取余)——整数

1.题目

给定两个正整数(不含前导 0),计算它们的和。

输入格式
共两行,每行包含一个整数。

输出格式
共一行,包含所求的和。

数据范围
1 ≤ 整数长度 ≤ 100000 1≤整数长度≤100000 1整数长度100000

输入样例:

12
23

输出样例:

35

2.基本思想

Java中有两个类可以来处理高精度的计算
分别是处理整数的BigInteger和处理小数的BigDecimal

3.代码实现

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner sc = new Scanner(System.in);
        String a = sc.next(), b = sc.next();
        char[] A = new char[a.length()], B = new char[b.length()];
        for (int i = a.length() - 1; i >= 0; i--)
            A[a.length() - 1 - i] = a.charAt(i);//将大整数a 的数字 按照 各位在前排序 a:【6 5 4】——>A:【4 5 6】
        for (int i = b.length() - 1; i >= 0; i--) B[b.length() - 1 - i] = b.charAt(i);
        String s = add(A, B);
        System.out.println(s);
    }

    private static String add(char[] A, char[] B) {
   
        StringBuffer sb = new StringBuffer();
        int t = 0;
        if (A.length < B.length) return add(B, A);
        for (int i = 0; i < A.length; i++) {
   
            t += A[i] - '0';//转数字
            if (i < B.length) t += B[i] - '0';
            sb.append(t % 10);
            t /= 10;
        }
        //判断最后的t
        if (t != 0) sb.append(1);
        return sb.reverse().toString();
    }
}

调用 函数 实现

import java.io.*;
import java.math.BigInteger;

public class Main{
   
    public static void main(String args[]) throws IOException {
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        BigInteger a = new BigInteger(reader.readLine());
        BigInteger b = new BigInteger(reader.readLine());
        System.out.println(a.add(b));
        reader.close();
    }
}

4.总结

BigInteger 只可用于整数

构造方法

BigInteger(byte[] val)
将包含BigInteger的二进制补码二进制表达式的字节数组转换为BigInteger
BigInteger(int numBits, Random rnd)
构造一个随机生成的BigInteger,均匀分布在0到(2 numBits - 1)的范围内。
BigInteger(String val)
将BigInteger的十进制字符串表示形式转换为BigInteger。

加法 add( )

import java.math.BigInteger;
import java.io.*;

public class Main {
   

    public static void main(String[] args) throws IOException{
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        BigInteger a = new BigInteger(reader.readLine());
        BigInteger b = new BigInteger(reader.readLine());
        System.out.println(a.add(b));
        reader.close();
    }
}

减法 subtract( )

import java.io.*;
import java.math.BigInteger;

public class Main {
   

    public static void main(String[] args) throws IOException{
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigInteger a = new BigInteger(reader.readLine());
        BigInteger b = new BigInteger(reader.readLine());
        System.out.println(a.subtract(b));
        reader.close();
    }
}

乘法 multiply( )

import java.io.*;
import java.math.BigInteger;

public class Main {
   

    public static void main(String[] args) throws IOException{
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigInteger a = new BigInteger(reader.readLine());
        BigInteger b = new BigInteger(reader.readLine());
        System.out.println(a.multiply(b));
        reader.close();
    }
}

除法 divideAndRemainder( )

import java.io.*;
import java.math.BigInteger;

public class Main {
   

    public static void main(String[] args) throws IOException{
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigInteger a = new BigInteger(reader.readLine());
        BigInteger b = new BigInteger(reader.readLine());
        //divide 返回值为 a/b
        BigInteger[] c = a.divideAndRemainder(b); //返回值为数组,分别为a/b和a%b
        System.out.println(c[0]);
        System.out.println(c[1]);
        reader.close();
    }
}

取余 mod( )

import java.io.*;
import java.math.BigInteger;

public class Main {
   

    public static void main(String[] args) throws IOException {
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigInteger a = new BigInteger(reader.readLine());
        BigInteger b = new BigInteger(reader.readLine());
        System.out.println(a.mod(b));
        reader.close();
    }
}

BigDecimal 处理浮点数运算

构造方法

BigDecimal(char[] in) 
一个转换的字符数组表示 BigDecimalBigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造。  
BigDecimal(char[] in, int offset, int len) 
一个转换的字符数组表示 BigDecimalBigDecimal ,接受字符作为的相同序列 BigDecimal(String)构造,同时允许一个子阵列被指定。    
BigDecimal(double val)double转换为 BigDecimal ,这是 double的二进制浮点值的精确十进制表示 
BigDecimal(int val)intBigDecimal
BigDecimal(long val)longBigDecimal
BigDecimal(String val) 

加法 add( )

import java.io.*;
import java.math.BigDecimal;

public class Main {
   

    public static void main(String[] args) throws IOException {
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigDecimal a = new BigDecimal(reader.readLine());
        BigDecimal b = new BigDecimal(reader.readLine());
        System.out.println(a.add(b));
        reader.close();
    }
}

取余 remainder( )

import java.io.*;
import java.math.BigDecimal;

public class Main {
   

    public static void main(String[] args) throws IOException {
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigDecimal a = new BigDecimal(reader.readLine());
        BigDecimal b = new BigDecimal(reader.readLine());
        System.out.println(a.remainder(b));
        reader.close();
    }
}

除法 divide( )

import java.io.*;
import java.math.BigDecimal;

public class Main {
   

    public static void main(String[] args) throws IOException {
   
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        BigDecimal a = new BigDecimal(reader.readLine());
        BigDecimal b = new BigDecimal(reader.readLine());
        System.out.println(a.divide(b));
        reader.close();
    }
}

相关推荐

  1. 精度加法 分类讨论 AcWing 791. 精度加法

    2024-01-29 08:40:04       48 阅读
  2. AcWing 791. 精度加法——算法基础课题解

    2024-01-29 08:40:04       38 阅读
  3. 精度乘除

    2024-01-29 08:40:04       39 阅读
  4. AcWing 793. 精度乘法——算法基础课题解

    2024-01-29 08:40:04       34 阅读
  5. 精度加法精度乘法

    2024-01-29 08:40:04       34 阅读
  6. 第一章 基础算法(二)(精度乘除

    2024-01-29 08:40:04       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-29 08:40:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-29 08:40:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-29 08:40:04       82 阅读
  4. Python语言-面向对象

    2024-01-29 08:40:04       91 阅读

热门阅读

  1. VUE computed和watch例子

    2024-01-29 08:40:04       58 阅读
  2. [EFI]戴尔T5810电脑 Hackintosh 黑苹果efi引导文件

    2024-01-29 08:40:04       57 阅读
  3. 非root运行docker容器

    2024-01-29 08:40:04       59 阅读
  4. go标准库Context上下文

    2024-01-29 08:40:04       48 阅读