大整数类的实现(6)(原创)

6-1 设计实现大整数类 设计实现大整数类 题目 设计实现“HugeInteger” 大整数类,实现大整数的加法、输入和输出功能。能够满足以下程序的运行: #include #include using namespace std; /* 请在这里写出HugeInteger类的定义和实现 */ int main() { HugeInteger n1( 7654321 ); HugeInteger n2( 7891234 ); HugeInteger n3( “99999999999999999999999999999” ); H 阅读详情
 2)

——————————————————————————————————————————

    template<long N,template<long,typename>class __Alloc>
        bool HugeNumberBase<N,__Alloc>::EqualValue(unsigned long value) const{
            if(data_[N-1]==value){
                for(long i=0;i<N-1;i++)
                    if(data_[i])
                        return false;
                return true;
            }
            return false;
        }
    template<long N,template<long,typename>class __Alloc>
        long HugeNumberBase<N,__Alloc>::HighestBit() const{
            long at=0;
            while(at<N&&!data_[at])
                at++;
            if(at>=N)
                return 0;
            long t(0);
            while(!((data_[at]<<t)&SignBit))
                t++;
            return (N-at)*EachBits-t-1;
        }
    template<long N,template<long,typename>class __Alloc>
        long HugeNumberBase<N,__Alloc>::LowestBit() const{
            long at(N-1);
            while(at>=0&&!data_[at])
                at--;
            if(at<0)
                return 0;
            long t(0);
            while(!((data_[at]>>t)&1))
                t++;
            return (N-1-at)*EachBits+t;
       
}

    template<long N,template<long,typename>class __Alloc>
        HugeNumberBase<N,__Alloc> & HugeNumberBase<N,__Alloc>::ResetHigherBits(long Position){
            long at(N-1-Position/EachBits);
            for(long i=0;i<at;i++)
                data_[i]=0;
            data_[at]&=(1<<(Position%EachBits))-1;
            return *this;
        }

——————————————————————————————————————————

 

这段代码包括4个函数:
    EqualValue
    HighestBit
    LowestBit
    ResetHigherBits

函数EqualValue很简单,即判断当前大整数是否和参数value相等。首先它看大整数的最低32 bits(data_[N-1])是否和value相等,然后判断其他高位bits是否为0。
这个函数存在的原因是:如果用OperatorEqual来判断大整数与给定的unsigned long是否相等,是“杀鸡用牛刀”,会因为生成临时HugeNumberBase而降低效率。
函数HighestBit和的功能也很简单,得到大整数最高(最低)比特1的位置,比如一个64 bits的大整数是0x 30 00 00 00 50 00 00 08,它的最高比特1就是30里面最高位的那个比特1,位置是61(从0开始算);而它的最低比特1就是08里最低的比特1,位置是3(从0开始)。
它们的作用清楚了,代码也就很明朗了。
在HighestBit中:
            long at=0;
            while(at<N&&!data_[at])
                at++;
            if(at>=N)
                return 0;

找到高位中第一个不是0的data_,如果大整数本来就是0,那么返回0;
接着在data_[at]找最高位的比特1,这通过把data_[at]向左移t位,再看第31比特位是否为1来实现:
            long t(0);
            while(!((data_[at]<<t)&SignBit))
                t++;

最后在return里计算比特1的位置。

在LowestBit则正好相反:
            long at(N-1);
            while(at>=0&&!data_[at])
                at--;
            if(at<0)
                return 0;

找到低位中第一个不是0的data_,如果大整数本来就是0,那么返回0;
接着在data_[at]找最低位的比特1,这通过把data_[at]向右移t位,再与1进行And操作来判断:
            long t(0);
            while(!((data_[at]>>t)&1))
                t++;

最后同样在return中计算比特1的位置。

函数ResetHigherBits的作用是:把大整数里所有大于Position的比特位都置0,Position位置从0开始计算。比如0x1234,如果把Position=2以上的所有比特位置0,那么将变成0x4。
这个过程包含2步:
            long at(N-1-Position/EachBits);
            for(long i=0;i<at;i++)
                data_[i]=0;

根据Position计算出分界点在data_[at]内,然后把data_[at]高位(0 <= i < at)全部置0;
            data_[at]&=(1<<(Position%EachBits))-1;
由Position%EachBits计算出在data_[at]内比特0与1的分界位置,然后只保留需要的比特1。

HugeInteger大整数计数器作业 HugeInteger Class) Create a class HugeInteger that uses a 40-element array of digits to store integers as large as 40 digits each. Provide member functions input, output, add and subtract. For comparing HugeInteger objects, provide functions isEqualTo, isNotEqualTo, isGreaterThan, isLessThan, isGreaterThanOrEqualTo and isLessThanOrEqualTo — each of these is a “predicate” function that simply returns true if the relationship holds between the two HugeIntegers and returns false if the relationship does not hold. Also, provide a predicate function isZero.  If you feel ambitious, provide member functions multiply, divide and modulus 立即下载

相关推荐

大整数类c++实现

这是我的处女发,呵呵。 言归正传,这是我们老师提供给我们让我们编写高精度有理数用的,这个类包很小,功能也只是一些基本运算。我自己也曾经试着写一个大整数类,但和大多数初学者一样卡在了除法上。在这个类包中,除法用的是折半试商法,但我个人认为效率很低。 还有许多大整数类包,可以在网上下到,但我觉得这个对初学者很好。特别是对运算符重载的学习。 另外,我从一本数值算法书中也找到了一个高精度运算的实现。有点难,本人数值分析学得糟,正在着磨中。但我学习数值分析的过程中认识到的是:数值解再精确也是一个逼近值。我不理解怎么会用数值算法解决高精度运算呢。 我把书向大家推荐一下,希望大家一起探讨。《Numerical Recipes in c++》作者:William H.press, Saul A.Teukolsky等,电子工业出版社出版的翻译版《c++数值算法》第668页。

c++重庆大学 2022级-第七次作业-类

6-1 设计实现大整数类分数 30作者 葛亮单位 重庆大学设计实现“HugeInteger” 大整数类,实现大整数的加法、输入和输出功能。

mo_zhongzhou的博客 4670

大整数类型的设计

定义大整数类,重载算术运算+ - *等运算符与== > < 关系运算符

cpp设计并实现大整数

文章目录前言一、设计大整数类1.第一步:大整数类的输入和部分功能的构建2.第二步:用string类保存大整数数值3.第三步:关于大整数类的赋值4.第四步:大整数加法的实现及兼容性5.第五步:输出大整数类二、测试代码(大整数相加与输出测试程序)类与测试代码(类内定义函数,直接复制可用) 前言 第三次发csdn,心情还是有些许的激动 一、设计大整数类 功能:简易设计类似python的大整数加法。 1.第一步:大整数类的输入和部分功能的构建 class HugeInteger { private:

faroh的博客 4456

从厘米级到公里级:北斗网格10级精度在ArcPro中的完整应用指南

本文提供了北斗网格十级精度体系在ArcGIS Pro中的完整应用指南。详细解析了从660公里到1.5厘米的十级网格尺度及其编码逻辑,并重点演示了如何在ArcPro中生成网格、计算编码,以及根据项目需求(如滑坡监测)选择合适精度层级的实战策略。指南旨在帮助GIS专业人士利用这套统一的网格框架,高效管理多尺度空间数据并优化分析工作流。

Black的专栏 472

AI智能体项目管理框架agent-pm:从原理到实战的多智能体协作指南

在人工智能和自动化技术快速发展的今天,多智能体系统已成为实现复杂任务自动化的重要技术路径。其核心原理在于通过任务分解、角色分配和状态管理,让多个AI智能体像人类团队一样协同工作,从而突破单个模型的性能边界。这种架构的技术价值在于将软件工程中成熟的项目管理方法论引入AI领域,显著提升了自动化流程的可预测性、可观测性和可复用性。在实际应用场景中,多智能体协作框架能够高效处理从代码开发、文档撰写到数据分析等一系列任务,尤其适合需要多步骤、多专业协同的复杂项目。本文聚焦的agent-pm框架,正是这一领域的典型实践

weixin_42533910的博客 714

PTA - 6-1 简单输出整数

void PrintN(int); void PrintN(int NUM) { for (int i = 1; i <= NUM; ++i) { printf("%d\n", i); } }

T h a t 的博客 204

【Cadence】stb仿真和ac仿真——以一个简单的全差分反相放大器仿真为例

最近在补一些仿真方法学的问题,以及一些一直以来都有点模糊的概念,简单记录一下。搭建一个以两个CMOS反相器构成的全差分放大器(28nm工艺,PMOS和NMOS尺寸一致)激励的设置方便共模和差模仿真用同一个TB(这里有一个问题:这个放大器需要在开环下仿真还是闭环下?哪些放大器应用在开环,哪些闭环?这种应用场景不同会导致需要仿真得到开环还是闭环增益,或者环路增益?(我知道放大器在设计的时候肯定都是闭环应用的多,但是什么时候没必要闭环应用?光验证ac和stb仿真是否一样的话有必要有回路吗?

weixin_44951108的博客 5万+

大整数类设计(C++)

简介 在平时的功能需求中,C/C++语言内置的整形变量表示范围已经足够大了,但是在一些特定的场合,例如解决数学问题的时候,可能需要表示极大的整数。这时候C/C++语言提供的类型就不能满足需求了,需要自己来实现超大整数的实现,当然仅仅是能够存储超大整数还不行,还要能够进行运算。 设计功能 能够表达正数与负数 能够由整形或字符串转化得到 能够使用 + - * / 等符号进行运算 可以与int 类型进行混合运算 可以使用输入输出流 当发生除数为零等错误时会抛出异常 源码分享 头文件:BigInt.h #inc

qq_42731435的博客 4820

13、超声断层乳腺图像融合算法:乳腺癌诊断新突破

本文介绍了一种新型超声断层乳腺图像融合算法,通过结合超声透射(UTTc、UTTα)和反射断层图像(URT),实现对乳腺组织的多参数自动可视化。该算法能有效区分良性与恶性肿瘤,具有高准确性、无辐射、低成本等优势,适用于大规模乳腺癌早期筛查。初步临床测试验证了其可行性,未来有望成为乳腺癌诊断的新标准。

9q8w7e6r5的博客 155

基于STM32L4XX、HAL库的AD7768BSTZ 模数转换器ADC驱动程序设计

/ 默认SPI配置。// 读取通道数据命令。// 通过SYNC_IN引脚触发转换(如果使用)// 处理数据...// 或者通过SPI命令。// 初始化AD7768。// SPI1引脚配置。

zhusl6688的博客 462

大整数类的实现(1)(原创)

       每次上论坛都能找到类似求100!的问题,其实这些题目归根究底就是一个大整数类的实现。一般大家提到的方法是用数组,每个数字要么表示一个10进制位,要么表示几个10进制位。我觉得这样虽然在对“人”是直观了,但是对“电脑”却非常不直观,所以我觉得应该按照计算机的2进制表示方式来实现。       按照自己的想法,我写了这样一个大整数类,内部用long的数组来表示,是在2进制层面,即

daidodo的专栏 2942

软考高级系统架构设计师历年论文真题深度分析(2011-2025)

本文系统分析了2011-2025年系统架构设计师论文真题,归纳出十大主题类别,包括架构风格、企业集成、数据技术、非功能属性等。研究发现新兴技术占比最高(18.8%),企业集成、数据架构和非功能属性为三大核心考点。论文命题呈现明显技术演进特征,从经典架构理论逐步转向云原生、AI融合等前沿方向。备考建议重点关注高频考点和技术前沿,同时强化场景化解决方案能力。分析表明,架构师考试持续跟踪行业技术发展,注重理论与实践结合,为考生提供了明确的备考方向。

一几文的编程学习笔记。 2049

大整数类的实现(7)(原创)

3)————————————————————————————————————————————————    templateclass __Alloc>        HugeNumberBase & HugeNumberBase::RightShift(){            for(long i=N-1;i>0;--i)                data_[i]=(data_

daidodo的专栏 853

【雷达】一维和二维自适应波束形成(DBF))DBF附matlab代码

1 简介 数字波束形成技术是天线波束形成原理与数字信号处理技术相结合的产物,其广泛应用于阵列信号处理领域.由于电磁工作环境的恶化和大量射频干扰的存在,在极低的信干噪比(SINR)条件下进行目标检测和信息提取十分困难.对于阵列系统,往往采用自适应数字波束形成(ADBF)技术,来抑制强干扰和方向性干扰对有用信号的影响.介绍了数字波束形成器的基本原理及其DSP的实现结构.​ 2 完整代码 clc;clear all;close all;%%%%%%%%%%%%%%%%%一维DBF%%%%%%%%%%%%%

qq_59747472的博客 7267

OpenCV 实战篇——如何测算出任一副图片中的物体的实际尺寸?传感器尺寸与像元尺寸的关系?

本文介绍了通过相机图像测算物体实际尺寸的方法,重点分析了传感器参数与成像质量的关系。文章首先给出了物体实际尺寸的计算公式,涉及像素尺寸、距离、分辨率等参数。然后详细解析了传感器尺寸与像元尺寸的关系,指出相同分辨率下更大的传感器能获得更好的成像质量。此外还介绍了光学尺寸、像素尺寸对成像的影响,以及帧率的概念。最后提及了相机标定的重要性,并概述了从像素坐标系转换到世界坐标系的基本思路。这些知识为通过相机图像进行精确测量提供了理论基础。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 1337

大整数类的实现(5)(原创)

5.HugeNumberBase.h————————————————————————————————————————/* * Copyright (c) 2005 by DoZerg.  ALL RIGHTS RESERVED.  * Consult your license regarding permissions and restrictions. *//**************

daidodo的专栏 916

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

大整数类的实现(2)(原创)

 3.SignedHugeLong.h————————————————————————————————————/* * Copyright (c) 2005 by DoZerg.  ALL RIGHTS RESERVED.  * Consult your license regarding permissions and restrictions. */#pragma once#inclu

daidodo的专栏 733

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

大整数类的实现(3)(原创)

 本来现在我应该要介绍HugeNumberBase的实现了,但是我不准备在这里介绍。因为HugeNumberBase的实现是需要详细解说的,可能要花上不久的时间和不少的篇幅,我觉得可能先等我把所有其他“外围”代码都解决完了,再来专心对付这个“核心”会比较好,所以我这里介绍DataAllocation.h和Helper.h的实现。 4.DataAllocation.h————————

daidodo的专栏 807

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

大整数类的实现(4)(原创)

 5.Helper.h————————————————————————————————————/* * Copyright (c) 2005 by DoZerg.  ALL RIGHTS RESERVED.  * Consult your license regarding permissions and restrictions. */#pragma once#includename

daidodo的专栏 833

用C++设计并实现一个大整数类

http://blog.youkuaiyun.com/hackbuteer1/article/details/6595881 转载于:https://www.cnblogs.com/qianggezhishen/p/7349460.html

dengji8846的博客 2164

[原创]最近学习STL,在C++库中苦寻不到BigInteger类,于是自己写了一个

// big_integer.h#include #include #include using namespace std;class NumberFormatException{    private:        string str;    public:        NumberFormatException(string);        friend ostream& o

hippoz的专栏 1905

HDU 1042 - N!

题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1042   初学练手题~~~      ============================================================================================================= C++流 ~~    很简单,

诳人居 1043

[ C++ 快速高精度模板 ] [ BigN类 ] 大整数类 高精度 模板 BigInt FFT 快速傅里叶变换...

【原创 转载请注明】瞎写的,如果代码有错,或者各位大佬有什么意见建议,望不吝赐教 更新日志:   对于规模较小的整数乘法使用$$O(n^2)$$方法,提高速度   modify()和operator[]的bug修正   除法速度提升   修正了除法崩溃的问题   修正了除数为零崩溃的问题 1 /** 2 * BigN Beata v1.3.1 3 *...

weixin_30897233的博客 256

BigInteger

在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,可以让超过Integer范围内的数据进行运算,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数,只要计算机内存足够大。 这两个类都在java.math.*包中,因此每次必须在开头处引用该包。 Ⅰ基本函数: 1.valueOf(parament); 将参数转换为制定的类型 比如 int a=3;...

weixin_42785633的博客 2284
上一篇: 大整数类的实现(5)(原创)
下一篇: 大整数类的实现(7)(原创)
daidodo
博客等级 码龄22年 43粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值