You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中存储超大数字「58176849671553176833344572581」应使用哪种数据类型?

在Java中存储超大整数的解决方案

你提到的数字「58176849671553176833344572581」有29位,远超过long类型的最大值(9223372036854775807,仅19位),无法用long存储;而float/double作为浮点类型,采用科学计数法存储整数时会丢失精度,同样无法准确表示这类超大整数。

正确的存储类型:java.math.BigInteger

Java标准库中的BigInteger类专门用于表示任意精度的整数,它没有固定的位数限制,能准确存储和运算任何大小的整数,完全适配你遇到的超大数字场景。

适配你的代码修改示例

原代码使用sc.nextLong()读取超大数字会直接抛出溢出异常,同时字符串拼接效率较低。以下是修改后的代码,结合BigInteger实现需求:

package uri;
import java.util.*;
import java.math.BigInteger;

public class Clutter {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        // 直接读取数字字符串,避免long类型溢出
        String bStr = sc.next();
        
        while (a != 0 && !bStr.equals("0")) {
            StringBuilder resultBuilder = new StringBuilder();
            for (char c : bStr.toCharArray()) {
                int digit = Character.getNumericValue(c);
                if (digit == a) {
                    // 处理删除所有字符后的边界情况
                    if (resultBuilder.length() == 0 && bStr.length() == 1) {
                        System.out.println(0);
                        return;
                    }
                    continue;
                }
                resultBuilder.append(c);
            }
            
            // 输出结果:空字符串则输出0,否则转BigInteger输出
            if (resultBuilder.length() == 0) {
                System.out.println(0);
            } else {
                BigInteger result = new BigInteger(resultBuilder.toString());
                System.out.println(result);
            }
            
            a = sc.nextInt();
            bStr = sc.next();
        }
    }
}

关键修改说明

  • 用sc.next()读取超大数字的字符串形式,绕过基本类型的容量限制
  • 改用StringBuilder拼接字符,比直接使用String的+操作更高效
  • 处理完成后通过BigInteger转换字符串,保证输出数值的准确性
  • 补充了删除所有字符时输出0的边界逻辑,避免转换异常

内容的提问来源于stack exchange,提问作者Codered

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:48:18