Java大数 -- BigInteger类

news2024/11/26 15:39:47

        在java语言中,每一种整数类型都有自己的上限和下限,如果要想对非常大的整数做运算,就需要使用BigInteger类。特别在做算法题传入一个数值型的字符串时。

1.包

import java.math.*;

2.构造方法

public BigInteger(String str){...}

BigInteger bigInteger = new BigInteger(String str);

3.常用方法

因为BigInteger所创建的是对象,所以不能使用传统的加减乘除。要调用对应方法。

            加法                           add(BigInteger val)
            减法                         subtract(BigInteger val)
            乘法                         multiply(BigInteger val)
            除法                           divide(BigInteger val)
            求余                divideAndRemainder(BigInteger val)

特别的,求余会返回一个大数数组,数组0索引位置是除数,1索引位置是余数。

并且大数之间比较大小只能用equals。

并且运算时,不能强转类型,只能在大数之间运算。 非大数类型是不能和大数操作的,只能再new一个,且new后的括号中不能为空。

 

4.将大数转换为基本数据类型

 

例如这样一道进制转换题:十进制数有30位,对于java语言来说,int,long 都超出范围了。只能用大数。

import java.util.Scanner;
import java.math.*;

public class Main {
    public static BigInteger b = new BigInteger("2");   //除数2 弄成成员变量 
    public static BigInteger zeros = new BigInteger("0");  //递归结束判断 
    public static StringBuffer sb = new StringBuffer();  //可变字符串
    public static void main(String[] args) {
        
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) { 

            sb.setLength(0);   //由于sb是成员变量不是局部变量,所以每次计算都要清空
            BigInteger a = in.nextBigInteger();
            if(a.equals(zeros)) {   //大数之间比较要用equals
                System.out.print(0);
            }
            System.out.println(exchange(a).toString());

            
        }
    }

    public static StringBuffer exchange(BigInteger a) {
        if(a.equals(zeros)) return sb;
        exchange(a.divide(b));
        BigInteger[] tmp = a.divideAndRemainder(b);//大数求余会返回一个数组
                                                   //0索引是除数,1索引是余数
        sb.append(tmp[1].toString());
        return sb;

    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1053248.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Go_原子操作和锁

原子操作和锁 本文先探究并发问题,再探究锁和原子操作解决问题的方式,最后进行对比。 并发问题 首先,我们看一下程序 num该程序表面看上去一步就可以运行完成,但是实际上,在计算机中是分三步运行的,如下…

让大脑自由

前言 作者写这本书的目的是什么? 教会我们如何让大脑更好地为自己工作。 1 大脑的运行机制是怎样的? 大脑的基本运行机制是神经元之间通过突触传递信息,神经元的兴奋和抑制状态决定了神经网络的运行和信息处理,神经网络可以通过…

[架构之路-226]:信息系统建模 - 实体关系图、数据流图、数据字典、流程图

目录 一、信息系统建模概述 二、常见建模工具 2.1 实体关系图 -- “实体》类” 》关注实体,对象 2.2 数据流图 -- 数据流动 -- 关注数据本身 2.3 业务-流程图 -- 活动步骤 -- 关注动作、活动 三、建模工具的比较 3.1 数据流图与业务流程图的区别 3.2 数据、…

Linux高性能服务器编程 学习笔记 第九章 IO复用

IO复用使程序能同时监听多个文件描述符,这可以提高程序的性能,通常网络程序在以下情况需要使用IO复用: 1.客户端进程需要同时处理多个socket。 2.客户端进程需要同时处理用户输入和网络连接。 3.TCP服务器要同时处理监听socket和连接socket…

网络-Ajax

文章目录 前言一、Ajax优点:缺点: 二、使用步骤XNLHttpRequest对象完整代码 总结 前言 本文主要记录Ajax技术的简介,以及用法。 一、Ajax Ajax是一组用于在Web浏览器和Web服务器之间进行异步通信的Web开发技术。 它代表着Asynchronous Java…

如果在 Mac 上的 Safari 浏览器中无法打开网站

使用网络管理员提供的信息更改代理设置。个人建议DNS解析,设置多个例如114.114.114.114 8.8.8.8 8.8.4.4 如果打不开网站,请尝试这些建议。 在 Mac 上的 Safari 浏览器 App 中,检查页面无法打开时出现的信息。 这可能会建议解决问题的…

第 114 场 LeetCode 双周赛题解

A 收集元素的最少操作次数 模拟: 反序遍历数组&#xff0c;用一个集合存当前遍历过的不超过 k k k 的正数 class Solution { public:int minOperations(vector<int> &nums, int k) {unordered_set<int> vis;int n nums.size();int i n - 1;for (;; i--) {if…

nodejs+vue活鲜物流监控系统elementui

第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;技术背景 5 3.2.2经济可行性 6 3.2.3操作可行性&#xff1a; 6 3.3 项目设计目标与原则 6 3.4系统流程分析 7 3.4.1操作流程 7 3.4.2添加信息流程 8 3.4.3删除信息流程 9 第4章 系统设计 11 …

蓝桥等考Python组别十级003

第一部分&#xff1a;选择题 1、Python L10 &#xff08;15分&#xff09; 已知s Pencil&#xff0c;下列说法正确的是&#xff08; &#xff09;。 s[0]对应的字符是Ps[1]对应的字符是ns[-1]对应的字符是is[3]对应的字符是e 正确答案&#xff1a;A 2、Python L10 &am…

【OpenCV-Torch-dlib-ubuntu】Vm虚拟机linux环境摄像头调用方法与dilb模型探究

前言 随着金秋时节的来临&#xff0c;国庆和中秋的双重喜庆汇聚成一片温暖的节日氛围。在这个美好的时刻&#xff0c;我们有幸共同迎来一次长达8天的假期&#xff0c;为心灵充电&#xff0c;为身体放松&#xff0c;为未来充实自己。今年的国庆不仅仅是家国团聚的时刻&#xff…

SSL/TLS介绍以及wireshark抓包TLS Handshake报文

文章目录 1.概念1.1 SSL/TLS发展历史1.2 TLS两个阶段1.3 TLS报文头 2.TLS Handshake2.1 Handshake具体过程2.1.1 单向认证和双向认证2.1.2 复用TLS协商结果Session Identifier&#xff08;会话标识符&#xff09;Session Ticket&#xff08;会话票据&#xff09; 2.2 Handshake…

实验篇——根据群体经纬度提取环境数据(数据降维)

实验篇——根据群体经纬度提取环境数据&#xff08;数据降维&#xff09; 文章目录 前言一、先导二、R语言实现2.1. 分气温、降水、光照、风速、蒸汽压划分数据集2.2. 对每个数据集降维处理2.2.1. 气温2.2.2. 降水2.2.2. 光照2.2.3. 风速2.2.4. 蒸汽压2.2.5.定义一个函数&#…

【小沐学前端】Node.js实现UDP和Protobuf 通信(protobuf.js)

文章目录 1、简介1.1 node1.2 Protobuf 2、下载和安装2.1 node2.2 Protobuf 3、node 代码示例3.1 HTTP3.2 UDP单播3.4 UDP广播 4、Protobuf 代码示例4.1 例子:awesome.proto 结语 1、简介 1.1 node Node.js 是一个开源的、跨平台的 JavaScript 运行时环境。 Node.js 是一个开源…

基于 SpringBoot+Vue 的教室人事档案管理系统

1 简介 教师人事档案管理系统利用信息的合理管理&#xff0c;动态的、高效的、安全的实现了教师的各种需求&#xff0c;改变了传统的网上查看方式&#xff0c;使教师可以足不出户的在线查看最适合自己个人档案、奖惩信息、档案变动、培训报名或者新闻资讯。 1、教师后台功能模…

闪存工作原理

前言 1、闪存类型 闪存有两种分类&#xff0c;NAND型闪存主要用于存储 2、MOS的特性 MOS管的三个引脚分别是Gate&#xff08;G&#xff09;、Source&#xff08;S&#xff09;和Drain&#xff08;D&#xff09;。Gate&#xff08;G&#xff09;引脚是晶闸管的控制引脚&…

Qt::图层框架-图片图层-序列图层-QGraphicsPixmapItem

二维矢量动画智能制作软件开发合集 链接&#xff1a;软件开发技术分享及记录合集 个人开发二维矢量动画智能制作软件界面如下&#xff1a; 目录 一、图片序列图层原理 二、图片序列图层代码实现 三、图片序列图层软件测试视频 结束语 一、图片序列图层原理 本软件的11种…

Sentinel学习(2)——sentinel的使用,引入依赖和配置 对消费者进行流控 对生产者进行熔断降级

前言 Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 本篇博客介绍sentinel的使用&#x…

后端各层的部署开发

目录 一、创建数据库 二、entity层 三、mapper层 四、service层 五、controller层 一、创建数据库 CREATE TABLE user (id bigint NOT NULL AUTO_INCREMENT COMMENT id,name varchar(10) DEFAULT NULL COMMENT 姓名,sex varchar(5) DEFAULT NULL COMMENT 性别,phone varcha…

NLP 03(LSTM)

一、LSTM LSTM (Long Short-Term Memory) 也称长短时记忆结构,它是传统RNN的变体,与经典RNN相比&#xff1a; 能够有效捕捉长序列之间的语义关联缓解梯度消失或爆炸现象 LSTM的结构更复杂,它的核心结构可以分为四个部分去解析: 遗忘门、输入门、细胞状态、输出门 LSTM内部结构…

如何在Qt中引入Network模块

2023年10月1日&#xff0c;周日凌晨 如果用的是CMake find_package(Qt6 COMPONENTS Network REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Network) 如果用的是qmake QT network