黄子涵

3.9 大数

java.math

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中两个很有用的类:BigIntegerBigDecimal。这两个类可以处理包含任意长度数字序列的数值。

BigInteger类

BigInteger类实现任意精度的整数运算

BigDecimal类

BigDecimal类实现任意精度的浮点数运算。

静态的valueOf方法

使用静态的valueOf方法可以将普通的数值转换为大数:

BigInteger a = BigInteger.valueOf(100);

程序示例

import java.math.BigInteger;
public class HuangZiHanTest
{
public static void main(String[] args)
{
int huangzihan100 = 100;
int huangzihan1314 = 1314;
int huangzihan123456789 = 123456789;
BigInteger huangzihanValueOf100 = BigInteger.valueOf(100);
BigInteger huangzihanValueOf1314 = BigInteger.valueOf(1314);
BigInteger huangzihanValueOf123456789 = BigInteger.valueOf(123456789);
System.out.println(huangzihan100);
System.out.println(huangzihan1314);
System.out.println(huangzihan123456789);
System.out.println();
System.out.println(huangzihanValueOf100);
System.out.println(huangzihanValueOf1314);
System.out.println(huangzihanValueOf123456789);
}
}

运行结果

100
1314
123456789
100
1314
123456789

带字符串参数的构造器

对于更大的数,可以使用一个带字符串参数的构造器:

BigInteger reallyBig = new BigInteger("222232244629428445529739893461909967206666939096499764998979600");

程序示例

import java.math.BigInteger;
public class HuangZiHanTest
{
public static void main(String[] args)
{
BigInteger huangzihan123456789987654321 = new BigInteger("123456789987654321");
BigInteger huangzihan123456789123456789123456789 = new BigInteger("123456789123456789123456789");
System.out.println(huangzihan123456789987654321);
System.out.println(huangzihan123456789123456789123456789);
}
}

运行结果

123456789987654321
123456789123456789123456789

另外还有一些常量:BigInteger.ZERO、BigInteger.ONE和BigInteger.TEN,Java 9之后还增加了BigInteger.TWO。

add和multiply方法

遗憾的是,不能使用人们熟悉的算术运算符(如:+和×)处理大数,而需要使用大数类中的addmultiply方法。

BigInteger c = a.add(b); //c=a+b
BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); //d=c*(b+2)

程序示例

import java.math.BigInteger;
public class HuangZiHanTest
{
public static void main(String[] args)
{
BigInteger huangzihanA = BigInteger.valueOf(123456789);
BigInteger huangzihanB = BigInteger.valueOf(987654321);
BigInteger huangzihanC = huangzihanA.add(huangzihanB);
System.out.println(huangzihanC);
BigInteger huangzihanD = huangzihanC.multiply(huangzihanB.add(BigInteger.valueOf(2)));
System.out.println(huangzihanD);
}
}

运行结果

1111111110
1097393691124828530

程序示例

image

运行结果

你需要画多少个数字?
5
你能画的最高数字是什么?
10
你的几率是252分之一。祝你好运!
posted @   黄子涵  阅读(108)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示