非负整数大数高精度加法乘法【c++】

C++ 大整数类(无符号BigInteger类和带符号SignedBigInteger类)实现 C++ BigInteger类实现,存储任意大小的非负整数 参考 算法竞赛入门经典第二版 5.3 节——大整数类 代码(先放代码,后续追加注释与可以为负数的实现) #include <string> #include <vector> #include <algorithm> #include <iostream> using namespace std; /** * 存储任意大小的非负整数 */ class BigInteger { fr 阅读详情

 高精度模板,效率一般,不过大部分题目可以凑合凑合过。

追求极致的大佬可以忽略了。

class BN {//大数字  比较  加法  乘法  cout
private:
    static const int MAXN = 86;
    int data[MAXN];
    int len;
public:
    BN() { len = 1; data[0] = 0; for (int i = 0; i < MAXN; ++i) { data[i] = 0; } }  //默认初始化为0;
    BN(int a){
        for (int i = 0; i < MAXN; ++i) { data[i] = 0; }
        len = 0;
        do {
            data[len] = a % 10;
            a /= 10;
            len++;
        }while(a);
    }
    bool operator<(const BN& a) const { //这地方的第二个const是必须的 否则就会报错 (可能是用了vector的缘故吧我这么猜)
        if (len < a.size()) {
            return true;
        }
        else if (len == a.size()) {
            for (int i = len-1; i >=0; --i) {
                if (data[i] < a.data[i]) {
                    return true;
                }
                else if (data[i] > a.data[i]) {
                    return false;
                }
            }
        }
        return false;
    }
    BN operator+(const BN& a) {
        BN ret(0);
        int i = 0, j = 0;
        int jin = 0;
        int temp;
        ret.len = 0;
        while (i < len && j < a.size()) {
            temp = jin + data[i++] + a.data[j++];
            ret.data[ret.len++] = temp % 10;
            jin = temp / 10;
        }
        while (i < len) {
            temp = jin + data[i++];
            ret.data[ret.len++] = temp % 10;
            jin = temp / 10;
        }
        while (j < a.size()) {
            temp = jin + a.data[j++];
            ret.data[ret.len++] = temp % 10;
            jin = temp / 10;
        }
        if (jin != 0) {
            ret.data[ret.len++] = jin;
        }
        return ret;
    }
    BN operator*(const BN& a) {
        if ((a.size() == 1&& a.data[0] == 0 )||( len == 1 && data[0] == 0)) {
            return BN(0);
        }
        BN ret(0);
        int jin=0, cur=0, temp=0;
        for (int i = 0; i < len; ++i) {
            jin = 0,cur = i,temp = 0;
            for (int j = 0; j < a.size(); ++j) {
                temp = data[i] * a.data[j] + jin + ret.data[cur];
                ret.data[cur++] = temp % 10;
                jin = temp / 10;
            }
            if (jin) {
                ret.data[cur++] = jin;
            }
        }
        while (cur > 1 && ret.data[cur - 1] == 0) {
            cur--;
        }
        ret.len = cur;
        return ret;
    }
    /*
    friend ostream & operator<<(ostream& cot,BN & a) {
        for (int i = a.len - 1; i >= 0; --i) {
            cot << a.data[i];
        }
        return cot;
    }*/
    friend ostream& operator<<(ostream& cot,const  BN& a) { ///这样就可以使用cout<<a*b 了 分析原因如下:a*b返回一个BN,但是他很快会被释放(因为是返回值) ,const BN & a = xxx 底层上是创建了一个变量来存储xxx 然后对其引用
        for (int i = a.len - 1; i >= 0; --i) {
            cot << a.data[i];
        }
        return cot;
    }
    int size() const {
        return len;
    }
};

有缺陷还请指出!

C++:第十五讲高精度算法 在C++中当你用int、long long,甚至是unsigned long long 都无法处理的超级巨大数字,你会感到无比痛苦甚至到绝望,那么我们此时就只有一种方法了——高精度算法。我们可以利用程序设计的方法去实现这样的高精度计算。介绍常用的几种高精度计算的方法。本文主要实现的是自然数范围内做运算的加法、减法、乘法、除法四种基本高精度运算。高精度(High Precision)是一种在计算机编程中用于表示和操作大数的技术。在C++中,可以使用高精度思想来处理大数,例如质数、因数分解等。 阅读详情

相关推荐

Windows下直接运行的大数加法乘法工具(带完整C++源码)

两个独立的Windows可执行程序,分别实现超长非负整数字符串的加法和乘法运算,不依赖第三方库,输入纯文本数字串即可输出精确十进制结果。大数相加支持自动进位与前导零清理;大数相乘采用模拟竖式乘法逻辑,逐位计算并累加,保证结果无精度丢失。每个功能均配套标准C++源码(.cpp文件),代码结构清晰、注释到位,适配g++和MSVC等主流编译器,可直接编译修改或嵌入其他项目。资源包开箱即用:根目录下并列放置add.exe、multiply.exe、大数相加.cpp、大数相乘.cpp,无子文件夹干扰,方便快速调用或学

arduino9maker的博客 227

【leetcode】最大数 c++

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

mie haha 1042

任意大非负整数的任意大非负整数次方

任意大非负整数的任意大非负整数次方的代码

给定一个非负整数的列表,安排它们形成最大的数字

https://leetcode-cn.com/problems/largest-number/ 力扣179 class Solution { public: std::string larNum(vector<int> & v) { sort(v.begin(),v.end(),[](int& x1,int& x2) { std::string str1 = std::to_string(x1); std::string str2 = std::

Damon 297

地瓜机器人RDK Studio使用入门教程

不知道大家在使用AI开发板的时候有没有遇到过板子官方镜像占据空间大难以保存,想要的时候找不到?官方示例项目久而久之便难以找寻?首次登陆开发板连接网络还需要准备显示器键盘鼠标外设繁杂?…为了解决平时开发过程中遇到的种种不便利问题,地瓜机器人创新的推出了RDK Studio这一官方开发者软件,使智能机器人开发迎来新纪元!通过这一软件极大降低了机器人的开发门槛,哪怕是零基础的用户亦可轻松上手RDK系列板卡!

xiongqi123123的博客 3427

手把手教你低成本复刻大疆C板缓启动电路(附原理图与选型清单)

本文详细介绍了如何低成本复刻大疆C板缓启动电路,包括核心器件选型、电路搭建与调试实战、参数优化方法论及进阶改进思路。通过替代型号和优化设计,实现功能相近的缓启动电路,成本不到原方案的1/3,适合电子爱好者、在校学生和预算紧张的硬件工程师。

weixin_29197051的博客 397

[LeetCode][C++]最大数

最大数 给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。 示例 1: 输入: [10,2] 输出: 210 示例 2: 输入: [3,30,34,5,9] 输出: 9534330 说明: 输出结果可能非常大,所以你需要返回一个字符串而不是整数。 思路: 可以创建一个大顶堆,对每个两个数的组合进行排序,大的排前面,自定义比较函数。 对大顶堆进行遍历,逐元素拼接到字符串上。 注意: 若数组为空,则返回空字符串。 数组由一连串0,则返回“0”,而非“000…”。 不允许将数组元素按位拆开,每个

qq_41221520的博客 710

正确使用 SGLang 和 vLLM 中为 Qwen3 开启工具调用能力的完整指南

本文介绍了在vLLM和SGLang框架中部署Qwen3大模型并启用工具调用功能的方法。主要内容包括:vLLM中需配置--tool-call-parser hermes和--enable-auto-tool-choice参数,SGLang中使用--tool-call-parser qwen25参数;提供了完整的部署命令示例和测试工具调用的curl请求模板;对比了两个框架的关键参数差异;总结了常见问题解决方案和性能优化建议。正确配置后,Qwen3能够充分发挥其外部工具调用能力,为AI应用开发提供支持。

Ven%的博客 4449

整数类型

C++中提供的整数类型有三种:int、long、short,每种类型又分为有符号和无符号两种类型。有符号整数既可以表示非负整数,又可以表示负整数;但是,无符号整数不能表示负数,只能表示非负整数。(一)无符号整数 在内存中,int整数通常占4字节,这里,我们假定int为32位,那么无符号整数表示的取值范围为0x00000000~0xFFFFFFFF,转换为十进制为0~4294967...

weixin_30407099的博客 801

基于相位检测与锁相环的DIY超声波风速仪设计与实现

相位检测是信号处理中的一项基础技术,它通过测量两个周期信号之间的相位差来获取信息。其核心原理在于,当信号在介质中传播时,外部因素(如风速)会改变其传播速度,从而导致接收端信号的相位发生偏移。锁相环(PLL)是实现高精度相位检测的关键电路,它能动态调整本地振荡器的频率,以跟踪并锁定输入信号的相位,从而将微小的相位变化转换为易于测量的电压信号。这项技术的工程价值在于其对电路精度要求相对较低,鲁棒性好,非常适合低成本、高灵敏度的测量应用。在气象监测、工业传感和消费电子等领域,相位检测技术被广泛用于风速风向测量、位

weixin_29540599的博客 387

【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析

本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。

weixin_26965807的博客 236

K11132 大整数乘法

求两个不超过200位的非负整数的积。

WTC20120518的博客 249

PX4笔记系列(二)vtol_att_control中的tiltrotor解析

update_vtol_state() 注释:采用两段切换的简单逻辑来进行过渡 当切换过渡开关后,飞机将会开始倾转动力,逐渐加速,当飞机获得足够速度后动力将会完全打到向前的位置。对于过渡返回阶段动力则是简单地倾转回来。 如果(不在向前过渡指令下): 当前vtol飞行模式: 1、旋翼模式 无操作 2、固定翼模式 令vtol飞行模式切换到过渡返回模式 3、P1过渡模式 进入过渡失败安全返回至旋翼模式 4、P2过渡模式 进入过渡失败安全返回至旋翼模式 5、过渡返回模式 记录过渡返回时间=当前时间-过渡开始

hypersonicss的博客 1879

大整数类概述

一、相关介绍 大数运算 因数和结果可达几十万位 处理方法:用数组存储和表示大数 C++好处:重载运算符,使大整数类可以像int一样使用 备注:C++中的内置类型的精度最多只有20几位。 结构体BigInteger可用于储存高精度非负整数: 1 #include<cstdio> 2 #include<cstring> 3 #include&...

weixin_34363171的博客 177

YOLO11改进 | 主干网络 | 添加Hyper-YOLO的MANet混合聚合网络

本文详细介绍了在YOLO11目标检测模型中替换C3k2模块为MANet的具体实现方法。文章首先讲解MANet模块的原理,然后分步骤指导如何在YOLO11中添加该模块,包括代码修改、文件配置和模型注册等关键环节。通过实验对比,改进后的YOLO11_MANet模型在保持8.8GFLOPs计算量的同时,参数数量达到3,820,272,网络层数增加到343层。文章还提供了完整的代码实现和网络结构图,并建议结合其他注意力机制或损失函数进一步提升检测效果。最后推荐了相关的深度学习专栏,包含更多YOLO系列改进方法。

kay_545 658

LeRobot 官方论文:一个用于端到端机器人学习的开源库

本文介绍了一个名为LeRobot的开源库,旨在解决机器人学习领域的碎片化问题。该库提供了端到端的技术栈,包括统一的机器人中间件API、标准化的数据集格式(LeRobotDataset)、优化的推理栈以及多种最先进机器人学习算法的实现。LeRobot支持多种低成本开源机器人平台(如SO-10X、ALOHA-2等),通过共享中间件实现便捷的遥操作和数据收集。其数据集格式已广泛应用于社区,截至2025年9月已有16,000多个数据集公开共享。该库还支持流式处理大规模数据,降低了研究门槛。在模型方面,LeRobot

2506_90492529的博客 905

1174:大整数乘法

传送门:http://ybt.ssoier.cn:8088/problem_show.php?pid=1174 【题目描述】 求两个不超过200位的非负整数的积。 【输入】 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。 【输出】 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。 【输入样例】 12345678...

weixin_34187822的博客 155

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++实现高精度乘法(附带源码)

C++实现高精度乘法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 2022

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

c++高精度细剖

高精度计算是指能够处理超出标准数据类型(如intlong longfloatdouble等)范围或精度的数值运算。这在金融计算、科学模拟、密码学、大数分解等领域尤为重要。

szm111213的博客 2448

C++ 大数乘法

本文介绍了C++中实现高精度整数乘法的算法,通过模拟手工竖式乘法来计算大数相乘。算法采用字符串存储大数,逐位相乘并处理进位,最后转换为字符串输出。关键要点包括:1) 使用数组存储中间结果;2) 正确处理进位和移位;3) 特殊处理零值情况。文章提供了完整代码实现、复杂度分析(O(n*m))和多个测试示例,帮助理解如何处理超过内置整型范围的数值运算,适用于任意长度非负整数的乘法计算。

每行代码都热烈滚烫。 583

高精度乘法算法深度解析:C++实现大数相乘的艺术(洛谷P1303)

本文详细解析了C++实现高精度乘法的算法,通过模拟手工乘法处理2000位大数相乘问题。算法核心包括:反转字符串从低位处理、双重循环逐位相乘(O(n²)复杂度)、分层进位传递机制以及前导零处理技巧。文章提供了完整C++代码实现,涵盖特殊边界条件处理,并分析了Karatsuba等优化算法的可能性。该算法在密码学、科学计算等领域有重要应用,是算法竞赛中处理大数运算的基础技能,适合需要精确计算超大数值的场景。

stillwatersss的博客 1053

AcWing 793:高精度乘法 ← vector

1.C++不支持大数运算,故而引入高精度算法。 2.高精度乘法将大数以字符串形式输入,然后拆分转换为一位一位的整数,之后按照小学的竖式运算方法完成编码。(注意:字符串中0下标从左开始,竖式运算中0下标从右开始,故代码中需要有一个逆序操作。如a[i]=s1[s1.length()-i-1]-'0';) 3.对最高位做判断,删除前导0,然后输出便得结果。

hnjzsyjyj的专栏 6256

AcWing 793. c++ 实现高精度乘法:大数 * 大数 与 大数 * 小数

题目描述 给定两个非负整数(不含前导 0) AAA 和 BBB,请你计算 A×BA×BA×B 的值。 输入格式 共两行,第一行包含整数 AAA,第二行包含整数 BBB。 输出格式 共一行,包含 A×BA×BA×B 的值。 数据范围 1≤A的长度≤100000,1≤A的长度≤100000,1≤A的长度≤100000, 0≤B≤100000≤B≤100000≤B≤10000 输入样例: 78995364 89008978996 输出样例: 7031296695057374544 大数 * 小数 C++ 代

门前花开满田岸的博客 255

高精度乘法(c++实现)

​ 当我们需要计算两个很大的数时,int , long long 都不能满足时,我们可以使用高精度乘法。 这里我们分了两类,高精度乘一个int型,或者高精度乘高精度。 1.给定两个非负整数(不含前

qq_59183443的博客 6412

793 高精度乘法(高精度乘法模板)

1. 问题描述: 2. 思路分析: 3. 代码如下: c++代码: #include<stdio.h> #include<iostream> #include<algorithm> // memset函数在cstring头文件中 #include<cstring> using namespace std; // 根据n位阶乘那么估计长度大概是多少 const int N = 100000; int a[N], res[N]; void mu

二哈 1335

简单高精度乘法

【高精度】高精度乘法 时间限制:1 Sec内存限制:64 MB 题目描述 牢门上的第三道锁,需要使用高精度乘法来破译出相应密码,当然,必须使用“万进制算法”计算两个非负整数A、B的积,其中A和B的位数在10000位以内。 输入 共两行数据,第一行为一个非负整数A,第二行为一个非负整数B,A、B的位数均在10000以内。 输出 输出一个数,即A和B的乘积。 样例...

anjiaao9180的博客 256
上一篇: 快速幂快速乘模板【c++】
下一篇: 《红黑树最少和最多红节点》贪心法题解分析
咖啡咖_CoffCa
博客等级 码龄6年 116粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

咖啡咖_CoffCa

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

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

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

打赏作者

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

抵扣说明:

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

余额充值