大数相乘和相加(当长整形都表示不了这个整数时,该如何进行计算呢?)

C++处理大数问题/高精度问题,看这就够了 将带你了解 1.大数加法 2.大数减法 3.辨识负数的大数加减法 4.大数乘法 5.大数除法 阅读详情

首先先写一个进位的函数

vector<int> jinwei(vector<int> result, int num, int digit)
{
	num = result[digit] + num;   //本位的进位数加上两个数在本位的和
	if (num >= 10)   //进位
	{
		int jin = num / 10;
		int save = num % 10;
		result[digit] = save;
		result = jinwei(result, jin, digit + 1);
	}
	else   //不进位
	{
		result[digit] = num;
	}
	return result;
}

1、大数相加

直接贴代码了

void bigadd()
{
	string str1;
	string str2;   //两个用字符串表示的数
	cin >> str1 >> str2;   //输入
	int len1 = str1.length();
	int len2 = str2.length();     //获取数字长度
	int n = len1 > len2 ? len1 + 1 : len2 + 1;    //两个数相加得到结果最大位数为其最大数的长度+1
	int i;
	vector<int> result(n);
	if (len1 > len2)   // 数字1比较大
	{
		for ( i = 0; i < len2; i++)    //先把两个数都有的位相加
		{
			int num1 = str1[len1 - 1 - i]-'0';
			int num2 = str2[len2 - 1 - i]-'0';
			int num = num1 + num2;
			result = jinwei(result, num, i);
		}
		for (; i < len1; i++)    //再把较大的数多余的位进行计算
			result = jinwei(result, str1[i] - '0', i);
	}
	else     //数字2比较大
	{
		for ( i = 0; i < len1; i++)
		{
			int num1 = str1[len1 - 1 - i] - '0';
			int num2 = str2[len2 - 1 - i] - '0';
			int num = num1 + num2;
			result = jinwei(result, num, i);
		}
		for (; i < len2; i++)
			result = jinwei(result, str2[i] - '0', i);
	}
	if (result[n - 1] == 0)   //最高位为0
		n--;
	for (int i = n - 1; i >= 0; i--)
		cout << char(result[i] + '0');
	return;
}

2、大数相乘

依然代码~

void bigmulti()
{
	string str1;
	string str2;   //两个用字符串表示的数
	cin >> str1 >> str2;    //输入
	int len1 = str1.length();
	int len2 = str2.length();       //获取数字长度
	int n = len1 + len2;    //两个数相乘,位数最多为两个数字位数之和,最少为和-1
	vector<int> result(n);
	for (int i = len1 - 1; i >= 0; i--)   //被乘数每一位依次和乘数的每一位进行乘法运算
	{
		for (int j = len2 - 1; j >= 0; j--)  //乘数的每一位
		{
			int num1 = str1[i] - '0';
			int num2 = str2[j] - '0';
			int num = num1*num2;
			int digit = len1 - 1 - i + len2 - 1 - j;
			result = jinwei(result, num, digit);
		}
	}
	if (result[n - 1] == 0)   //最高位为0
		n--;
	for (int i = n - 1; i >= 0; i--)
		cout << char(result[i] + '0');
	return ;
}
[Stanford CS217]CUDA中矩阵乘法GEMM优化的最关键点:向量内积和向量外积分别取行和取列 对于矩阵C中的每一个tile,矩阵A与矩阵B中的tile只需要读取一次,这样就可以达到 O(N) 的计算强度。理想情况下性能应当受限于算术吞吐量,确切来说对于一个大型方阵,即 M=N=K ,矩阵乘法的数学操作复杂度为 O(N3) ,而数据量为 O(N2) ,同时计算强度为 N (这里的计算强度可以被理解为同一个数据被重复利用的次数)。GEMM就是指计算 C=A∗B+C ,其中 A 、B和C都是矩阵,A是 M×K 的矩阵,B是 K×N 的矩阵, C是 M×N 的矩阵。这就是向量内积和向量外积的最大区别。 阅读详情

相关推荐

突破NER性能瓶颈:BERT与LLM协同的混合架构实践

性能卓越:在多个测试集上,F1分数比单一模型提升5-15%成本可控:相比纯LLM方案,成本降低60%以上易于落地:架构清晰,便于调试和优化这种"专才+通才"的组合思路可以扩展到其他NLP任务中,如关系抽取、事件提取、文本分类等。更精细的流水线优化多模型投票机制在线学习与自适应调整不追求单一模型的万能,而是通过精心设计的组合,让每个组件发挥其独特优势,最终实现系统性能的最优化。欢迎在评论区分享你在NER任务中的实践经验,或者对这个混合架构的改进建议!

Ven%的博客 1022

算法:大数相乘和相加

一、背景 在处理两个非常大的数相加或相乘时,其结果可能会超出整型范围,下面为整型数值范围: 二、解决方法 超大数相乘,应该考虑使用字符串或者字符数组来存储相关的数据,再或者使用整型数组来进行处理,乘法就是将数的每一位与另一位数的所有位数相乘。 ...

Golden_Knight的博客 515

OpenHarmony 4.1/5.0 Beta上手:如何用ArkUI在非华为设备上开发你的第一个“鸿蒙”应用

本文详细介绍了如何在非华为设备上使用ArkUI开发OpenHarmony应用,涵盖从设备选型、环境搭建到应用部署的全流程。通过实战案例展示ArkTS语言在开源鸿蒙生态中的应用,帮助开发者突破设备限制,构建跨平台鸿蒙应用。

weixin_33704234的博客 367

整型与字符型相加

想通过整型与字符型相加的到正确的整型数值,,见下面的程序: #include void main() { int a = 2; char c = '3'; int b = a+c; printf("int + char = %d\n",b); } 输出: int + char = 53 5

younghz 1万+

4.无限共轭距柯克物镜设计——zemax学习笔记

无限共轭cooker物镜

fly_daerm的博客 1598

《第二十二篇》Cross-Attention:注意力机制详解-代码实现和公式详解《二》

本文详细介绍了Cross-Attention的原理、公式和实现。Cross-Attention用于Transformer解码器和Encoder-Decoder结构,通过查询向量(Q)与键、值向量(K、V)的交互实现序列对齐。核心公式为softmax(QK^T/√d_k)V,其中Q来自Decoder,K、V来自Encoder。文章还给出了多头注意力机制公式和PyTorch实现代码,包括投影计算、注意力分数计算和输出处理。代码示例展示了如何构建一个完整的Cross-Attention模块,并演示了其在解码器查询

guoguozgw的博客 2212

关于长整数(很长很长)的加法————几种思路

长整数的加法 思路一 #include<stdio.h> #include<string.h> #define MAX_N 1000 int a[MAX_N]; int b[MAX_N]; char astr[MAX_N+2]; char bstr[MAX_N+2]; int main(void) { { //库函数memeset将地址a开始的sizeof(an...

一只彩乌鸦 4181

QMT实盘避坑指南:从环境配置到策略部署的完整流程(含国金证券路径设置)

本文是一份详尽的QMT实盘交易避坑指南,重点解析了从环境配置到策略部署的完整流程。针对国金证券QMT平台,文章深入剖析了核心架构、精准路径配置、关键参数解析、交易操作实战及异常处理,并提供了策略部署、监控与日志构建的完整方案,旨在帮助具备Python基础的开发者规避常见陷阱,实现稳定可靠的实盘交易。

weixin_29309475的博客 594

算法基础_大数相乘和大数相加

/** * 基本思想:分治递归,将大数相乘分解为大数相加问题 * eg:(123)*(12) * =(1*10^2+2*10^1+3*10^0)*(1*10^1+2*10^0) */ private static void getMul(String a, String b) { char[] as = a.toChar...

ThefFirsttThelLast的博客 480

普通人也能看懂的Transformer源代码解释(PyTorch)

Transformer源代码解释之PyTorch篇 章节 词嵌入 位置编码 多头注意力 搭建Transformer 在这里插入图片描述 词嵌入 Transformer本质上是一种Encoder,以翻译任务为例,原始数据集是以两种语言组成一行的,在应用时,应是Encoder输入源语言序列,Decoder里面输入需要被转换的语言序列(训练时)。一个文本常有许多序列组成,常见操作为将序列进行一些预处理(如词切分等)变成列表,一个序列的列表的元素通常为词表中不可切分的最小词,整个文本就是一个大列表,元素为一个一

qq_50974223的博客 4170

电磁阀颤振工作原理

颤振 颤振,弹性结构在均匀气(或液)流中受到空气(或液体)动力、弹性力和惯性力(见达朗伯原理)的耦合作用而发生的大幅度振动,它是气动弹性力学中最重要的问题之一。 随着机电液一体化技术的发展,电液比例控制技术的应用越来越广泛。电液比例控制系统范围较广,在液压传动与控制过程中,系统能够接受模拟信号或数字信号,使输出的流量或压力连续成比例地变化,都属于此类。该控制系统的优点是充分利用了液压控制与电气控制的长处,即功率传递靠液压,信号处理靠电气的优化措施。 电液比例控制原理与要求 液压控制系统中两个最重要的被控参数

小幽余生不加糖 1万+

python写的大整数相乘的方法

输入 72106547548473106236 982161082972751393 两个大整数 输出结果 70820244829634538040848656466105986748 解题思路 首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度。这里用的python,其实可以直接乘的,呵呵。 我暂定设为了 4,也就是 说 7210 6547 5484 7310 6236 98 2161 0829 7275 1393 然后 逐份相乘,当然千万别忘了结果要补零。 例

python学习者的博客 3448

【Matlab光伏功率预测】基于GRU门控循环单元的光伏功率时间序列预测(附MATLAB代码)

【Matlab光伏功率预测】基于GRU门控循环单元的光伏功率时间序列预测(附MATLAB代码)

k8291121的博客 1100

正整数的大数相乘

说明 1、输入必须是正整数 2、代码正确无误,因为这个是一道力扣的题。传送门 3、思路:从一个输入值中分别切出来每一位,与另个值相乘,并将结果相加。切出来的值与另一个值相乘的方法也是一位一位的切出来,相乘得到结果,然后汇总起来。 4、优化除了字符串形式的结果生成可以改成StringBuilder再快点,别的,目测不能再优化了。 代码 package calculate; public class...

weixin_45980031的博客 411

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

python超大整数_python写的大整数相乘的方法

输入72106547548473106236 982161082972751393 两个大整数输出结果70820244829634538040848656466105986748解题思路首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度。这里用的python,其实可以直接乘的,呵呵。我暂定设为了 4,也就是 说7210 6547 5484 7310 62...

weixin_39938522的博客 820

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大数相乘的实现

一般所说的大数即超出了系统所支持的最大类型的整形的表示范围,对于这种大的数不能用整形类型来表示,只能通过string 类型来表示。对于两个用string 类型来表示的大数,其乘法实现按两个数相乘的一般法则来实现。返回类型也用string 类型来表示。 //两个string 进行相加(按各位字符所对应的整数值) string execadd(string s1, string s2){ int

muguangzhilian的专栏 694

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

用java数组展示计算机的多位数相乘

用java数组展示计算机的多位数相乘 我们通常用java语言实现多位数相乘时,都是直接输入两个数然后便会输出结果 例如:System.out.print(1234*567); 便直接得到结果: 699678 那计算机里面是怎么实现多位数相乘的呢? 换句话说,计算机不可能储存每个数相乘的结果。和我们计算乘法一样——我们用所背乘法口诀表来计算。计算机只记录了乘法表的结果,然后以此为基础计算所有多少位数相乘的结果。 例: 下面我们用java数组展示下用这个原理来计算多位数: 1、引进两个乘数并放入数组中

dfight23的博客 2528

大数相乘问题

转载:http://www.cnblogs.com/jason-yang/archive/2012/04/26/2472755.html 题目是这样的:输入两个整数,要求输出这两个数的乘积。输入的数字可能超过计算机内整形数据的存储范围。 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示一串数字。然后按照乘法的运算规则,用一个乘数的每一位乘以另一个乘数,然后将所有中间结果

靴子猫的专栏 416

数据结构与算法系列 -- 两个大数的相加 与相乘

1. 题目: 两个大数(位数较大,现有的整形无法存储)相加,比如:计算123456789987654321 与987654321123456789 相加的和 Java代码如下: public class BigData { List<Integer> convertToNumber(String data){ List<Integer> result = new LinkedList<>(); for(int i=...

qq_33775774的博客 837

python长整数相乘_python写的大整数相乘的方法

输入72106547548473106236 982161082972751393 两个大整数输出结果70820244829634538040848656466105986748解题思路首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度。这里用的python,其实可以直接乘的,呵呵。我暂定设为了 4,也就是 说7210 6547 5484 7310 62...

weixin_39902598的博客 260

【分治】用四种方式计算大数乘法

在计算机中,通常用int,long来存储整形数字,但由于空间问题,当数字过大时,long也存储不了。因此当需要高精度计算大数的时候,该怎样处理呢?(不利用大数类) 现目前我有三条思路 模拟传统的人工乘法 竖式优化的乘法 分而治之 利用BigInteger类 1. 传统的人工乘法 思路:将乘数的每一位与被乘数相乘,得到的结果后面追加适当的0元素,再将所有的结果相加即可 此思路要用到额外的两个方法 将两个大数相加 一位数乘以多位数(包含一位数的情况) 代码如下: /** 415. 字符串相加 */ pu

chaim16的博客 941

大数相乘问题---转载

算法题-大数相乘问题 今天在网上看到一个大数相乘的问题,题目是这样的:输入两个整数,要求输出这两个数的乘积。输入的数字可能超过计算机内整形数据的存储范围。 分析: 由于数字无法用一个整形变量存储,很自然的想到用字符串来表示一串数字。然后按照乘法的运算规则,用一个乘数的每一位乘以另一个乘数,然后将所有中间结果按正确位置相加得到最终结果。可以分析得出如果乘数为A和B,A的位数为m

NN179的专栏 773

C语言大数相加及相乘(高精度数字)

大数相加及相乘(高精度数字)前言高精度数字的加法高精度数字的乘法 前言 在C语言中明确的规定了数字的类型及其大小,但是在一些时候,int或long类型不能满足数据的要求,所以我们需要寻找一些其他方法来计算这些数字。 高精度数字的加法 分析: 此时数字的范围超出了最大整形范围,那我们应该用什么方式来存储这个数字呢? 我们首先想到了数组,可以用字符数组的每一个元素存储整数的每一个数;这样我们就可以将两个数字存放入我们的两个字符串中。 在进行运算前,需要明确下面几点: 1.字符转数字,减去‘0’;数字转字符加

The_onion的博客 2117

java面试编程题 * 大整数相乘

题目描述 有两个用字符串表示的非常大的大整数,算出他们的乘积,也是用字符串表示。不能用系统自带的大整数类型。 输入描述: 空格分隔的两个字符串,代表输入的两个大整数 输出描述: 输入的乘积,用字符串表示 示例1 输入 复制 72106547548473106236 982161082972751393 输出 复制 70820244829634538040848656...

夜里想好千条路,明朝依旧起床卖豆腐。 431
上一篇: 7大常用排序算法总结
下一篇: 如何判断链表有环并判断环的入口节点
vanvanvane
博客等级 码龄7年 1粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值