大数类

C++ 大数类 #include #include #include #include #include #include #include #include using namespace std; class integer { friend istream& operator>>(istream& is,integer&); friend ostream& ope 阅读详情

大数类

1.大数类基本概述

Java在设计的时候就考虑到了一些特殊的应用环境,当一个数字非常大的时候,是无法用基本数据类型接收的,所以专门设计了大数字处理类。在早期开发中如果遇到大数字的时候往往会使用String类进行接收,之后使用拆分的方式进行计算。但是,这一系列的操作过于繁琐,所以为了解决这样的难题,在java.lang.Math包中提供了大数字的操作类:BigInteger(整数)、BigDecimal(浮点数),这两个类都是Number子类。其继承图如下:


2.BigInteger类的常用方法

方法类型描述
public BigInteger(String val)构造将一个字符串变为BigInteger类型的数据
public BigInteger add(BigInteger val)普通加法计算
public BigInteger subtract(BigInteger val)普通减法计算
public BigInteger multiply(BigInteger val)普通乘法计算
public BigInteger divide(BigInteger val)普通除法计算
public BigInteger max(BigInteger val)普通返回两个大数字中的最大值
public BigInteger min(BigInteger val)普通返回两个大数字中的最小值
public BigInteger[] divideAndRemainder(BigInteger val)普通除法操作:数组的第一个元素为商,第二个元素为余数

案例:使用BigInteger实现四则运算

public class BigIntegerTestDemo {
    public static void main(String[] args){
        BigInteger bigIntegerNumber01 = new BigInteger("25");
        BigInteger bigIntegerNumber02 = new BigInteger("4");
        
        System.out.println("bigIntegerNumber01:" + bigIntegerNumber01);
        System.out.println("bigIntegerNumber02:" + bigIntegerNumber02);
        System.out.println("加法操作:" + bigIntegerNumber01.add(bigIntegerNumber02));
        System.out.println("减法操作:" + bigIntegerNumber01.subtract(bigIntegerNumber02));
        System.out.println("乘法操作:" + bigIntegerNumber01.multiply(bigIntegerNumber02));
        System.out.println("除法操作:" + bigIntegerNumber01.divide(bigIntegerNumber02));
        BigInteger[] result = bigIntegerNumber01.divideAndRemainder(bigIntegerNumber02);
        System.out.println("商:" + result[0] + ",余数:" + result[1]);
    }
}

/*
输出结果:
bigIntegerNumber01:25
bigIntegerNumber02:4
加法操作:29
减法操作:21
乘法操作:100
除法操作:6
商:6,余数:1
*/

上述例子基于BigInteger类实现了基础四则运算,可以发现实例化BigInteger类对象时的数据类型为String,这样就可以不受数据类型长度的限制。


3.BigDecimal类的常用方法

方法类型描述
public BigDecimal(double val)构造将double类型转换为BigDecimal
public BigDecimal(int val)构造将int类型转换为BigDecimal
public BigDecimal(String val)构造将字符串形式转换为BigDecimal
public BigDecimal add(BigDecimal augend)普通加法计算
public BigDecimal subtract(BigDecimal subtrahend)普通减法计算
public BigDecimal multiply(BigDecimal multiplicand)普通乘法计算
public BigDecimal divide(BigDecimal divisor)普通除法计算
public BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode)普通除法计算设置保留小数位与进位模式

tips:在创建BigDecimal实例化对象的时,构造方法优先选择java.math.BigDecimal.BigDecimal(String val)。

因为,当使用double作为构造方法参数的时候,由于我们传入的值无法精确作为一个double类型,所以可能会出现我们不希望的结果,其精度不可控。 如下:

public class CreateBigDecimalTestDemo {
    public static void main(String[] args) {
        double num01 = 12.34;
        int num02 = 12;
        
        //double类型
        BigDecimal number01 = new BigDecimal(num01);
        //String类型
        BigDecimal number02 = new BigDecimal(String.valueOf(num01));
        //int类型
        BigDecimal number03 = new BigDecimal(num02);
        System.out.println("number01:" + number01);
        System.out.println("number02:" + number02);
        System.out.println("number03:" + number03);
    }
}

/*
输出结果:
number01:12.339999999999999857891452847979962825775146484375
number02:12.34
number03:12
*/

由上测试可得:String类型为参数的构造方法是完全可预知的:写入new BigDecimal(“0.1”) 将创建一个BigDecimal对象,它正好等于预期的 0.1。因此,通常建议优先使用String构造方法。倘若,必须以double类型用作构造函数的参数时,可先将doule类型转换为String,String.value(double double)转成String类型,然后使用BigDecimal的参数为String类型的构造方法。

BigDecimal类与BigInteger类的操作形式类似,但是BigDecimal类中提供有一个进位的除法操作,可以利用此方法实现四舍五入处理。

案例:使用BigDecimal实现四舍五入

class MathUtil {
    private MathUtil() {
    }

    /**
     * 实现数据的四舍五入操作
     * @return 四舍五入处理后的结果
     * @parm num 要进行四舍五入操作的数字
     * @parm scale 四舍五入保留的小数位数
     */
    public static double round(String num, int scale) {
        //数字除以1.0还是数字本身,divide()方法保留指定位数的小数,并设置进位模式为向上进位(HELF_UP)
        return new BigDecimal(num).divide(new BigDecimal("1.0"), scale, RoundingMode.HALF_UP).doubleValue();
    }
}

public class BigDecimalTestDemo {
    public static void main(String[] args) {
        double number = 19.5364;
        System.out.println(number + "保留两位:" + MathUtil.round(String.valueOf(number), 2));
        System.out.println(number + "保留三位:" + MathUtil.round(String.valueOf(number), 3));
    }
}

/*
输出结果:
19.5364保留两位:19.54
19.5364保留三位:19.536
*/

上述例子主要是利用BigDecimal类的divide()除法操作实现了准确的小数位数保留,同时利用向上进位模式实现了四舍五入操作。


注:此文章只是在学习过程中为加深自身理解做的笔记,其中有些方法已经被已经被弃用。


C++中大数运算类的设计与实现 本文还有配套的精品资源,点击获取 简介:在C++中,处理超出标准整型范围的大数运算需要特别的处理方法。开发者通常采用自定义类或第三方库来实现大数运算,包括基本的加、减、乘、除运算,甚至更高级的数学操作。本篇文章详细介绍了实现大数运算类的几种方式,包括自定义大数类、使用第三方库以及位操作技术。文章还讨论了大数运算类的关键组成部分,如初始化、存储机制、算术运算、比较操作和错误处... 阅读详情

相关推荐

C++实现的大数类:全功能教程与实践

本文还有配套的精品资源,点击获取 简介:C++中的大数类是一种自定义的数据结构,用于处理超出普通数据类型范围的超大数值。本类库包括一个文档"C++.doc",详细说明了大数类的使用方法和源代码。大数类基于数组或链表,支持初始化、赋值、输出显示、比较操作、基本算术运算、位运算和高级运算。它通过高效的算法如Karatsuba算法和长除法算法,优化了乘法和除法等运算的性能。文档还...

weixin_28895791的博客 1598

java 支持到20位数字的 数据类型,数据类型-java

基本数据类型内置数据类型引用数据类型Java常量自动类型转换自动类型转换强制类型转换隐含强制转换类型变量就是申请内存来存储值。创建变量的时候,需要在内从中有足够的空间。内存管理系统根据变量类型为变量分配存储空间,分配的空间只用用来存储该类型的数据内置数据类型也就是基本数据类型java语言提供了八种基本类型。其中 6种 数字类型(4个整型,2个浮点型),一种字符类型,一种布尔类型二进制位数8包装类j...

weixin_33880392的博客 2444

Java实现自定义大数类项目实战

判断两个数是否同号。如果同号,则执行加法逻辑。如果异号,则执行减法逻辑并决定结果符号。这种逻辑判断机制是加法实现的基础。一个完整的BigNumber类应包括以下核心结构:成员变量类型说明valueString存储数值字符串signboolean表示正负号方法返回类型说明addBigNumber实现加法subtractBigNumber实现减法multiply。

weixin_42588672的博客 904

java――大数类_java大数类BigInteger与BigDecimal

如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.mate包中的两个很有用的类:BigInteger与BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。将参数转换为制定的类型,返回一个BigInteger,其值等于指定long。这种“静态工厂方法”优先于(long)构造函数...

weixin_34023576的博客 322

大数类c++大数类

c++大数类,重载了全部运算符,很详细

有关大数的库(C语言实现)

实现了大数的数据结构的定义以及相关的操作,如大数的移位,加减乘除,求模,求逆,求幂 等等....代码注释详细,且为中文注释

Java数据类型

JAVA数据类型 强类型语言 要求要求变量的使用要严格符合规定,所有的变量都必须先定义后才能使用 弱类型语言 JAVA的数据类型分为两大类 基本类型(primitive type) 引用类型(reference type) 字节 位(bit):是计算机内部数据存储的最小单位,11001100是一个八位二进制数; 字节(byte):是计算机数据处理的基本单位,习惯上用大写B来表示; 1B(byte,字节) = 8bit(位..

lyllzcllf的博客 305

构造大数类

构造大数运算类 +;-;*;/ 并测试。<br>1. 不考虑括号 <br>2. 输入数据最大长度为40 位,要捕获异常 <br>3. 不考虑输入小数部分,<br>4. 测试要完整,先输入两个数,可输出上面两个数的运算结果;<br>5. 需要输出商和余数;

Java大数类

Java大数类 如果基本的整数和浮点数不能够满足需求,那么就可以使用java.math包中很有用的两个类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现任意精度的整数运算,BigDecimal实现任意精度的浮点数的运算。 BigInteger BIgInteger add(BigInteger other) 加 BIgInteger substract(BigInteger other) 减 BIgInteger

lxzGood的博客 1832

python机器人编程——用python实现一个写字机器人

本篇我们构建一个可以跟人一样写字的机器人python软件。实现如下功能:打开一个写字板,人类在屏幕上写或画出任意形状,机器人同步在纸面上画出和人类一样的形状,就好像人类在远程操控机械臂,又或是机械臂是人的另一只手。这个软件是可以扩展的,如果连上互联网,可以实现人在北京写了一行字,在上海的机器臂同时也在自己的本子上写了一行字。

JAMES费的空间 7992

多相机标定与单应变换:用OpenCV实现BEV俯视全景图

多路监控画面分散在不同屏幕,难以快速理解全局空间关系。通过相机标定与畸变校正,利用单应矩阵将各视角图像投影到统一的地面坐标系,即可合成BEV鸟瞰全景图。该技术是车载360°环视系统和自动驾驶BEV感知的雏形,也适用于场地安防与移动机器人导航。基于Python+OpenCV的四路相机实现,完整覆盖标定、投影变换、多路羽化融合与实时优化,为多视角拼接和俯视全景图项目提供可复现的工程参考。

weixin_29056865的博客 242

java 大数类方法整理

以上是Java大数类BigInteger和BigDecimal常用的方法及其使用示例。根据实际需求选择合适的方法来操作大数,以便处理超出基本数据类型范围的数值。

m0_73065928的博客 1097

Abaqus子程序开发避坑指南:从UMESHMOTION到齿轮磨损分析实战

本文深入探讨Abaqus子程序开发中的关键技术与避坑指南,重点解析UMESHMOTION在齿轮磨损分析中的实战应用。从开发环境搭建、调试框架构建到性能优化和大规模计算,提供系统化的解决方案。通过真实案例展示如何避免内存泄漏、网格畸变等常见问题,并介绍数据驱动的磨损预测等前沿技术,帮助工程师提升仿真精度与效率。

weixin_30892037的博客 87

Java 大数类

今天突然看到了OJ上的大数类题目,由于学习了一点大数类的知识。果断水了6道题。。。。。。都是非常基础的。就当的练手的吧。 学到的只是一些大数类的基本操作。以后多做点这样的题,争取熟练运用水大数题。。。 大数阶乘 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=28 代码如下: [java] view plai

Fighting_Dream 657

5款高性价比LDO芯片实测对比:从TPS7A4501到LM2940,哪款更适合你的项目?

本文通过实测对比了TPS7A4501、TPS72301、LM2937、LM2940等五款高性价比LDO芯片的核心性能。文章详细分析了跌落电压、输出噪声、静态电流及热性能等关键指标,并结合电池供电物联网节点、高精度数据采集等典型应用场景,提供了清晰的选型指南,帮助工程师根据项目需求选择最合适的LDO芯片。

weixin_29305337的博客 115

Cadence virtuos安装教程

本文详细介绍了在Ubuntu 18.04系统上安装Cadence Virtuoso IC617及MMSIM的完整流程。主要内容包括:1)系统环境准备(安装JDK及相关依赖包);2)通过创建软链接和修改系统文件实现RedHat环境兼容;3)共享目录文件操作与分卷压缩包合并解压技巧;4)使用InstallScape工具的安装步骤详解,包括权限处理和配置选项。特别提醒需注意系统兼容性处理(如创建redhat-release文件)和分卷压缩包的特殊解压方法(cat合并)。整个安装过程涉及大量Linux命令操作,需特

wangjie36的博客 298

JAVA大数类练手

刚学了点JAVA大数类,找几个大数的题目先练练手。 http://acm.nyist.net/JudgeOnline/status.php?pid=28 大数阶乘 import java.io.*; import java.util.*; import java.math.*; import java.math.BigInteger; public class Main { pub

1073

Allegro快速编辑丝印文字操作指导

选择setup-Application Mode-placement edit。Allegro支持丝印文字的编辑,下面介绍快速编辑丝印文字的两种方法如下。这个功能还支持拷贝粘贴,可以从其它地方拷贝过来,免去了书写的麻烦。出现text edit窗口,输入自己需要的文字,点击ok。鼠标移动到丝印文字位置,文字会被高亮起来。Allegro快速编辑丝印文字操作指导。点击丝印文字,丝印会被高亮起来。选择Text edit 命令。输入需要更改后的文字,如下。右击选择text edit。以编辑下方丝印文字为例。

weixin_54787054的博客 4192

c++大数类

#include #include #include #include #define LL long long #define INF 0x3f3f3f3f using namespace std; const int M = 1e3+10; const int MAXN = 9; class BigNum { public: int a[M],len,sign

ACMer_AK的博客 689

基于STM32设计的老人摔倒检测报警系统(OneNet+MQTT)(235)

基于STM32设计的老人摔倒检测报警系统,不仅能够实时监测老人的位置信息,方便在紧急情况下快速定位,还能通过陀螺仪模块精确检测老人的身体姿态,一旦判断为摔倒状态,系统将立即触发蜂鸣器报警,并通过4G网络向指定联系人发送短信警示,确保老人能够迅速得到援助。此外,系统还支持老人主动按下设备上的按键发送求助短信,增强了系统的灵活性和实用性。

4690

yolo 图像检测、关键点检测单摄像头测量物体尺寸长度大小

new_distance/real_size (待求物体像素距离与实际距离比值)= distance / metric_length (参照物像素距离与实际距离比值)然后运行size_demo进行要测量的物体进行关节点检测距离;metric_length是上面耳机选取的两个点的实际物理距离,大概6cm;这里用的windows。通过关键点检测识别物体关键点的像素距离,然后参考比例尺计算实际距离。2)关键点算法这里用的现有的进行测试,实际场景需要自己训练。这里拿这模型推理出的关键点坐标进行后续长度计算。

weixin_42357472的博客 2523

Java大数类的使用

ACM中使用,不介绍OOP(面向对象编程) 部分概念只为了快速使用理解,并不准确 文章目录java基本语法:基本结构:基本数据类型:分支语句:循环语句:输入输出:数组:java工具类String类:大数类: java基本语法: 基本结构: import java.math.BigDecimal; // 导入工具类的包,和#include<queue>那些一样的作用 import java.math.BigInteger; import java.lang.String; public cl.

weixin_43795939的博客 595

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

大数运算和大数类

1、首先看一个小问题: 整型数组、字符型数组、vector在未初始化的情况下: int main() { int data[5]; char c[5]; vector v(5); vector v1(5); vector v2; cout << "int[]: "; for (int i = 0; i < 5; i++) { cout << data[i] << "

松狮 1451

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java 设计大数类_设计并实现大数类 BigNum

学习任务:设计并实现大数类 BigNum代码示例:import java.util.Scanner;public class BigNum {private double num;public BigNum(double c) {num=c;System.out.println("BigNum Constructorrun");}public void setNum(double c) {num=...

weixin_35831256的博客 382

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

c++ 大数类

/* acdream : 1168 题意:给出无限长的序列1,1,3,1,3,5,7,1,3,5,7,9,11,13,15,1,3,5,7,9...,问对于序列的前N个数,所有的连续上升子序列的和是多少. 推公式 套大数类。 PS: 大数的模板是网上的,一开始各种wa后来群里面的大神们说减法有问题,改过后A掉的。 */ #include #include #include #in

小乞丐的小角落~ 1069
上一篇: String类的常见问题
下一篇: 我猜,你很少使用枚举
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

窝在角落里学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值