P1009 JAVA高精度,BigInteger

题目介绍

# [NOIP1998 普及组] 阶乘之和

## 题目描述

用高精度计算出 $S = 1! + 2! + 3! + \cdots + n!$($n \le 50$)。

其中 `!` 表示阶乘,定义为 $n!=n\times (n-1)\times (n-2)\times \cdots \times 1$。例如,$5! = 5 \times 4 \times 3 \times 2 \times 1=120$。

## 输入格式

一个正整数 $n$。

## 输出格式

一个正整数 $S$,表示计算结果。

## 样例 #1

### 样例输入 #1

```
3
```

### 样例输出 #1

```
9
```

## 提示

**【数据范围】**

对于 $100 \%$ 的数据,$1 \le n \le 50$。

**【其他说明】**

注,《深入浅出基础篇》中使用本题作为例题,但是其数据范围只有 $n \le 20$,使用书中的代码无法通过本题。

如果希望通过本题,请继续学习第八章高精度的知识。

不使用高精度的代码

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextInt();
        long sum = 0;long x = 1;
        for (long i = 1; i <= n; i++) {
            x *= i;
            sum += x;
        }
        System.out.println(sum);
    }
}

使用高精度的代码

import java.math.BigInteger;
import java.util.Scanner;

public class Text00 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        long n = sc.nextInt();
        BigInteger x = new BigInteger("1");
        BigInteger sum = new BigInteger("0");
        for (long i = 1; i <= n; i++) {
            x = x.multiply(BigInteger.valueOf(i));
            sum = sum.add(x);
        }
        System.out.println(sum);
    }
}

逻辑解释 Java高精度

Java中的高精度计算通常指的是能够处理比基本数据类型(如int、long、double等)更大范围和更高精度的数值运算。这种能力主要通过Java标准库中的BigInteger和BigDecimal类来实现。

  1. BigInteger类

    • BigInteger类用于表示任意精度的整数。它可以处理比long类型范围更大的整数,并支持基本的整数运算,如加减乘除、求幂、取余等。
    • 使用BigInteger类,您可以在程序中处理超过64位长的整数,这对于需要高精度计算的情况非常有用,比如密码学算法、大数运算等。
    • 示例用法:
      import java.math.BigInteger; 
      
      public class BigIntegerExample { 
          public static void main(String[] args) { 
          
              BigInteger num1 = new BigInteger("123456789012345678901234567890"); 
              BigInteger num2 = new BigInteger("987654321098765432109876543210"); 
              BigInteger sum = num1.add(num2);     
              System.out.println("Sum: " + sum); 
          } 
      }

  2. BigDecimal类

    • BigDecimal类用于表示任意精度的浮点数。它可以处理比double类型更高精度的浮点数,并支持基本的浮点数运算,如加减乘除、取余等。
    • 使用BigDecimal类,您可以在程序中进行精确的货币计算、税务计算等需要精确小数的情况。
    • 示例用法:
      import java.math.BigDecimal; 
      
      public class BigDecimalExample { 
          public static void main(String[] args) 
              {     
              BigDecimal num1 = new BigDecimal("1234.56789"); 
              BigDecimal num2 = new BigDecimal("9876.54321"); 
              BigDecimal sum = num1.add(num2); 
              System.out.println("Sum: " + sum); 
          } 
      }

这些高精度类在处理大数值或需要精确计算的情况下非常有用。但需要注意的是,由于高精度计算会消耗更多的内存和计算资源,因此在性能要求较高的场景下需要谨慎使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值