大整数

大整数运算(高精度运算)C/C++ 承载普通变量无法容纳的大整数,这一篇文章将详细的介绍所有模板,完整掌握C/C++大整数运算(高精度运算)。 阅读详情

一、基本操作

1、大整数的数据结构定义 

//大整数的数据结构定义 
struct bign
{
	int d[1000];
	int len;
	bign()
	{
		memset(d,0,sizeof(d));
		len=0;
	}
};

2、输入的字符串转为大整数 

//输入的字符串转为大整数 
bign change(char str[])
{
	bign a;
	a.len=strlen(str);
	for(int i=0;i<a.len;i++)
	{
		a.d[i]=str[len-1-i]-'0';
	}
	return a;	
} 

3、比较两个大整数的大小 

int compare(bign a,bign b)
{
	if(a.len>a.len) return 1;
	else if(a.len<b.len) return -1;
	else
	{
		for(int i=a.len-1;i>=0;i--)
		{
			if(a.d[i]>b.d[i]) return 1;
			else if(a.d[i]<b.d[i]) return -1;
		}
		return 0;
	}	
}

二、大整数的四则运算

1、两个大整数相加

//1、两个大整数相加:
bign add(bign a,bign b)
{
	bign c;
	int carry=0;  //进位
	for(int i=0;i<a.len||i<b.len;i++)
	{
		int temp=a.d[i]+b.d[i]+carry;
		c.d[c.len++]=temp%10;  //别忘记长度的增加!! 
		carry=temp/10;		
	} 
	if(carry!=0)
	{
		a.d[c.len++]=carry;
	}
	return c;
} 

 2、两个大整数相减

//2、两个大整数相减: 
bign sub(bign a,bign b)  //默认a比b大 
{
	bign c;
	for(int i=0;i<a.len||i<b.len;i++)
	{
		if(a.d[i]<b.d[i])
		{
			a.d[i]+=10;
			a.d[i+1]--;
		}
		c.d[c.len++]=a.d[i]-b.d[i];   //别忘记c的长度的增加!! 
	}
	//消去多余的0
	while(c.len>1&c.d[len-1]==0)
	{
		c.len--;
	} 
	return c;
} 

3、大整数乘以普通整数

//3、大整数乘以普通整数:
bign multi(bign a,int b)
{
	bign c;
	int carry=0;  //进位! 
	for(int i=0;i<a.len;i++)
	{
		int temp=a.d[i]*b+carry;
		c.d[c.len++]=temp%10;
		carry=temp/10;		
	}
	//此处注意区分与加法的不同! 
	while(carry!=0)
	{
		c.d[c.len++]=carry%10;
		carry/=10;		
	}
	
	//if(carry!=0)  c.d[c.len++]=carry;  //不对 
	return c; 
}

4、大整数 ÷普通整数

//4、大整数 ÷普通整数
bign divide(bign a,int b,int &r)
{
	bign c;
	c.len=a.len;
	for(int i=a.len-1;i>=0;i--)
	{
		r=r*10+a.d[i];
		if(r<b) c.d[i]=0;
		else
		{
			c.d[i]=r/b;
			r=r%b;
		}		
	}
	//消去头部多余的0 
	while(c.len>1&&c.d[c.len-1]==0) c.len--;
	return c;
} 

附:

大整数加法完整代码:

#include<iostream>
#include<map>
#include<cstring>
using namespace std;

struct bign
{
	int len;
	int d[1000];
	bign()
	{
		len=0;
		memset(d,0,sizeof(d));
	}	
};

bign change(char str[])
{
	bign c;
	c.len=strlen(str);
	for(int i=0;i<c.len;i++)
	{
		c.d[i]=str[c.len-1-i]-'0';		
	}
	return c;
} 

bign add(bign a,bign b)
{
	bign c;
	int carry=0;
	for(int i=0;i<a.len||i<b.len;i++)
	{
		int temp=a.d[i]+b.d[i]+carry;
		c.d[c.len++]=temp%10;
		carry=temp/10;
	}
	if(carry!=0)
	{
		c.d[c.len++]=carry;
	}
	return c;
}

void print(bign a)
{
	int len=a.len;
	for(int i=len-1;i>=0;i--)
	{
		cout<<a.d[i];
	}
}

int main()
{
	char str1[1000],str2[1000];
	cin>>str1>>str2;
	
	bign a=change(str1);
	bign b=change(str2);
	
	bign c=add(a,b);
	
	print(c);
	
	//cout<<add(a,b);
	return 0;	
	
}

大整数运算之 大整数加法、减法、乘法 其实大整数的问题都是在像我们打草稿的时候列竖式一样的,不要告诉我你不知道什么叫竖式~!其实我开始也不知道它叫这个名字; 所谓竖式,就是你打草稿算算术的方法,小学知识;比如你写 11+9: 11 +   9 ---------- 20 数A,B,求和,求差;数的长度不超过1000; 贴个代码,先输入一个数,代表数据的组数n,然后输入n组A B #inc 阅读详情

相关推荐

C++大整数

这两天一直在利用一些课余的琐碎时间在写C++大整数,昨天晚上终于基本完工了,利用到的思想就是: 用一个连续的int型的存储空间去表示大整数和进行运算。在运算时将该大整数拆分成一个多项式,然后按照 多项式的规则进行运算,最后在输出显示该大整数时再将该大整数的每一项进行调整到0到9之间。本程序的 缺点就是存储空间利用率较低,有待优化的地方还很多。嗯。。等过几天有时间了再来优化吧。 BigInt

YYC的专栏 3224

大整数(高精度整数)概念、创建、输入、表示和四则运算(高精度的加减乘除)——附完整代码

文章目录1 大整数的存储1.1 概念1.2 存储结构1.3 读入1.4 比较大小2 大整数的四则运算2.1 高精度的加法2.1.1 思想2.1.1 模版代码2.1.2 加法示例2.2 高精度的减法2.2.1 思想2.2.2 模版代码2.3 高精度与低精度的乘法2.3.1思想2.3.2 模版代码2.3 高精度与低精度的除法2.3.1 思想2.3.2 模版代码2.3.3 高精度的除法模版2.3.4 高...

韩江雪de 小屋 4333

大整数的求余数

现在给你一个自然数n,它的位数小于等于一百万,现在你要做的就是求出这个数除10003之后的余数 输入第一行有一个整数m(1 随后m行每行有一个自然数n。 输出 输出n整除10003之后的余数,每次输出占一行。 #include #include #include #include using namespace std; int main()

maowenge的专栏 3378

大整数的运算

两个大整数(如位数超过1000)的四则运算,显然不能按照普通的运算法则来计算,我们需要声明一个数组来保存每个整数,并且记录长度,即位数。数组中的每一个元素便对应整数当中的每一位,并且数组要提前初始化为0。在存每个数的时候按高位对应数组的高地址,低位对应低地址,即逆向存储。然后按运算法则对数组中的每一个元素即每一位进行运算。 注:为了方便起见,在读入大整数时将其以字符串的形式读入,然后再将其转换为int型存入数组 一、大整数定义 const int MAX = 1000;//最大长度 typedef st.

明月如霜,照见人如画 879

大整数/高精模板

大整数/高精度(暂不支持乘法)使用方法实现代码生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 使用方法 //声明 bignum a,b,c; //赋值 a = 123; //赋值int类型 a = "123"; //赋值字符串类型(char *) a = b; //赋值bignum类型 //运算(支持 + - *) c = a

Evrse的博客 1916

大整数乘法python3实现

由于python具有无限精度的int类型,所以用python实现大整数乘法是没意义的,但是思想是一样的。利用的规律是:第一个数的第i位和第二个数大第j位相乘,一定累加到结果的第i+j位上,这里是从0位置开始算的。代码如下: import sys def list2str(li): while li[0]==0: del li[0] res='' for i in li: res+

littlethunder的专栏 1万+

C++实现大整数加法

大整数加法可谓是学习C++语言的一个里程碑。那么,如何在C++简单易懂地实现大整数加法呢?  概念思路 假定这两个十进制的大整数位数不超过255位。 那么,可以定义两个长度为255的字符数组(num1,num2),以换行符作为分界线,依次读入。 最后,从两个数组的最后一位开始,一位位地向前相加,进位,直到两个数组都被读完或一个数组被读完(此时,更长的一个数组剩下的数字直接输出)。 例...

Commander_WingT的博客 4804

大整数运算

1.问题描述 密码学分为两类密码:对称密码和非对称密码。对称密码主要用于数据的加/解密,而非对称密码则主要用于认证、数字签名等场合。非对称密码在加密和解密时,是把加密的数据当作一个大的正整数来处理,这样就涉及到大整数的加、减、乘、除和指数运算等,同时,还需要对大整数进行输出。请采用相应的数据结构实现大整数的加、减、乘、除和指数运算,以及大整数的输入和输出。 2.实验基本要求 要求采用链表来实现大整数的存储和运算,不允许使用标准模板类的链表类(list)和函数。同时要求可以从键盘输入大整数,也可以文件输入大整数,大整数可以输出至显示器,也可以输出至文件。大整数的存储、运算和显示,可以同时支持二进制和十进制,但至少要支持十进制。大整数输出显示时,必须能清楚地表达出整数的位数。测试时,各种情况都需要测试,并附上测试截图;要求测试例子要比较详尽,各种极限情况也要考虑到,测试的输出信息要详细易懂,表明各个功能的执行正确; 1. 要求大整数的长度可以不受限制,即大整数的十进制位数不受限制,可以为十几位的整数,也可以为500多位的整数,甚至更长;大整数的运算和显示时,只需要考虑正的大整数。如果可能的话,请以秒为单位显示每次大整数运算的时间; 2. 要求采用类的设计思路,不允许出现类以外的函数定义,但允许友元函数。主函数中只能出现类的成员函数的调用,不允许出现对其它函数的调用。 3. 要求采用多文件方式:.h文件存储类的声明,.cpp文件存储类的实现,主函数main存储在另外一个单独的cpp文件中。如果采用类模板,则类的声明和实现都放在.h文件中。 4. 不强制要求采用类模板,也不要求采用可视化窗口;要求源程序中有相应注释; 5. 要求采用Visual C++ 6.0及以上版本进行调试; 3.实现提示 1. 大整数的加减运算可以分解为普通整数的运算来实现;而大整数的乘、除和指数运算,可以分解为大整数的加减运算。 2. 大整数的加、减、乘、除和指数运算,一般是在求两大整数在取余操作下的加、减、乘、除和指数运算,即分别求 (a +b) mod n, (a - b) mod n, (a * b) mod n, (a / b) mod n 和(a ^ b) mod n。其中a ^ b 是求a的b次方,而n称之为模数。说明:取余操作(即mod操作)是计算相除之后所得的余数,不同于除法运算的是,取余操作得到的是余数,而不是除数。如7 mod 5 = 2。模数n的设定,可以为2m 或10m,m允许每次计算时从键盘输入。模数n的取值一般为2512(相当于十进制150位左右),21024(相当于十进制200~300位),22048(相当于十进制300~500位)。为了测试,模数n也可以为2256, 2128等值。 3. 需要设计主要类有:链表类和大整数类。链表类用于处理链表的相关操作,包括缺省构造函数、拷贝构造函数、赋值函数、析构函数、链表的创建、插入、删除和显示等;而大整数类则用于处理大整数的各种运算和显示等。

大整数加减法

大整数加法 大整数减法 本篇将以上两部分内容结合,使之能够真正计算大整数的加减法。 大整数加法介绍了两个正的大整数相加,大整数减法介绍了两个正的大整数相减。 加法 加法有以下情况,它们都可以转换为以上链接讲述的问题: 正 + 正 ,如 1 + 1 正 + 负,如 1 + (-1) = 1 - 1 负 + 正,如 -1 + 1 = 1 - 1 负 + 符,如 -1 + -1 = -(1 + 1) ...

Ich/liebe/dich的编程せかい 2957

大整数四则运算

大整数四则运算

可信数据空间关键技术和功能架构研究

可信数据空间(TDS)是实现数据安全共享的基础设施,通过数字合约和使用控制技术确保数据跨域流通的可信与安全。其架构包括服务平台和接入连接器,关键技术涵盖访问控制、隐私计算、区块链等。评估重点在于合规性、连接器能力、互联互通及安全体系。核心在于构建规则引擎而非简单数据汇聚,连接器开发比平台建设更重要。当前面临技术成本博弈、跨域身份互认等挑战,需平衡安全、性能与成本,推动数据要素市场发展。

逸尘的专栏 2224

算法笔记 5.6 大整数运算 大整数的加减乘除

1.大整数数据结构(大整数的c语言描述) 标准约定:1.整数的高位存在数组的高位,低位存在数组的低位(四则运算都是从低位开始的,方便运算) 2.输入字符串于字符数组内,总是高位存在低位,低位存在高位,因此需要中间函数change()来转换 3.输出时,逆序输出(先输出高位,再输出低位) #include&lt;i...

树叶子的博客 1999

宇树机器人G1二次开发:导览、起始点、目的地与完整示例

通过宇树G1 SDK的导航接口,开发者可以高效地实现机器人的自主移动功能。连接 -> 设置目标点 -> 发送命令 -> 监控状态。本文提供的完整示例涵盖了从环境搭建到代码实现的全部步骤,并解释了起始点、目的地等关键概念。开发者可以在此基础上,结合多目标点巡逻、动态避障(需高级配置)等功能,构建更复杂的机器人应用。建议读者先在小范围、熟悉的平坦环境中测试,成功后再逐步扩展到更复杂的场景。

m0_52645558的博客 751

算法设计与分析:大整数的加减乘除运算

为了完成本关任务,你需要掌握:1.大整数的思想,2.大整数加法,3.大整数减法,4.大整数与整数的乘法,5.大整数乘法,6.大整数与整数的除法,7.n的阶乘求解思路。

Shining0596_Limcy 4466

画个板子玩一玩STM32F030F4P6,也许是最便宜的32bit MCU

前言,什么是STM32F030F4P6 STM32目前最便宜的芯片之一应该就是这一块,STM32F030F4P6,这一个芯片没有USB,但是其他都有,引脚少,价格低廉,如果找不到原厂,可以买替代的国产芯片,性能也一样。 不管怎么样也是Cortex-M0,比8bit和16bit的性能都强,总的来说就是低价,引脚少,体积小的同时,还容易开发,有很多模拟输入可玩,还有SPI,硬件I2C等等 所以,这一款MCU真的是从理论来说又便宜又好用,非常适合把玩。 画个板,最小系统 STM32F030其..

arenascat的博客 2万+

VSCode里玩转AvaloniaUI:手把手教你搭建跨平台桌面应用开发环境(附.NET 7配置避坑)

本文详细介绍了如何在VSCode中搭建AvaloniaUI跨平台桌面应用开发环境,包括.NET 7配置避坑指南。从环境准备、项目创建到调试优化,手把手教你利用VSCode和Avalonia实现高效开发,特别解决了.NET 7依赖等常见问题,助力开发者快速上手跨平台应用开发。

weixin_28826545的博客 578

大整数求和

大整数求和 【问题描述】大整数求和 用某种程序设计语言进行编程时,可发能需要处理非常大或者运算精度要求非常高的整数(称为大整数),这种大整数用该语言的基本数据类型无法直接表示。处理大整数的一般方法是用数组存储大整数,即开辟一个比较大的整型数组,数组元素代表大整数的一位,通过数组元素的运算模拟大整数的运算。 已知大整数,,求C=A+B。可以用两个顺序表A和B分别存储两个大整数,用顺序表C存储求和结果...

cc52xx的博客 1134

IAR安装成功的关键:STM32设备支持文件导入方法

IAR安装常卡在设备支持缺失这一步——尤其对STM32新手,没导入对应芯片包,编译直接报错。实测发现,必须通过IAR的Tools→Options→IDE→Configuration→Device Support手动加载STM32设备支持文件,否则新建工程时连芯片型号都选不到。IAR安装是否顺利,往往就差这一步。

weixin_42527589的博客 681

C++的大整数四则运算

前言:   随着做题数量的增加,我就慢慢地发现了大整数四则运算的重要性。   但是这些东西挺多的,设计起来也比较复杂,我们不能每次遇到需要大整数四则运算的题,就又重新编写一遍代码吧。   因此,我就想着说把之前刚入门时,苦熬一整天才写出的大整数四则运算代码发上来,供大家,包括我以后方便学习参考。   当然,程序是很久以前写的了,那时候还没学过算法,不懂什么优化,等以后有时间,再优化一下吧。   不...

龙少的小窝 3376

Cadence 17.2配置CIS数据库报错?手把手解决ODBC驱动位数不匹配问题

本文详细解析了Cadence 17.2配置CIS数据库时常见的ODBC驱动位数不匹配问题,提供了从系统环境检查到分步解决方案的完整指南。重点解决32位应用程序与64位ODBC驱动之间的架构冲突,包含驱动安装、DSN配置及高级排查技巧,帮助电子工程师快速恢复设计环境。

play7的博客 971

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。

解决方案:“Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\KernelBase.dll”。无法查找或打开 PDB 文件。 添加getchar();代码块解决无法查找或打开PDB文件。 错误提示: “Project1.exe”(Win32): 已加载“C:\Windows\SysWOW64\ntdll.dll”。无法查找或打开 PDB 文件。 “Pro...

m0_46523403的博客 6420

大整数乘法

大整数乘法 【分析】 一般情况下,求两个大整数相乘往往利用分治法解决,理解起来较为困难,这里我们使用的方法是模拟人类大脑计算两个整数相乘的方式进行求解大整数相乘,中间结果和最后结果仍然使用数组来存储。 假设A为被乘数,B为乘数,分别从A和B的最低位开始,将B的最低位分别与A的个位数依次相乘,乘积的最低位存放在数组元素a[门]中,高位(进位)存放在临时变量d中;再将B的次低位与A的个位数相乘,...

凌空的桨 4479

STM实战开发(13):STM32开发:使用光敏电阻检测光照强度

光敏电阻(LDR)是一种电阻值受光照强度影响的半导体材料。当光照强度增大时,光敏电阻的电阻值降低;而当光照强度减小时,电阻值则增大。光敏电阻的电阻变化与入射光的强度之间并不是线性关系,而是呈对数型的变化。LDR通常由硫化镉(CdS)或其他半导体材料构成,材料对不同波长的光有不同的响应特性。一般而言,光照强度越强,光敏电阻的电阻值越低,反之则越高。本文介绍了如何使用STM32与光敏电阻(LDR)结合,进行光照强度检测的实现方法。通过配置STM32的ADC模块,读取光敏电阻的电压信号,并根据电压计算光照强度。

2201_76125393的博客 3018
上一篇: pat a1059 Prime Factors (25分) 【质因子分解】
下一篇: ccf认证考试题型
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值