C++使用string的大数加法运算(1)
本次项目目标:使用C++完成对于大数的加法运算,供大家参考,具体内容如下
项目要点
1.大数指的是远超long long int的数据
2.将大数用矩阵进行存储,并通过矩阵实现运算
3.本人采用字符串进行存储,应注意char的特点
比如:
char a=161;
cout<<(int)a;
此时会输出-95,而不是161,char类型首个比特位是作为正负号的
加法,此处只做自然数加法,因为存在负整数的话可以使用自然数减法来处理
运行截图及代码如下:
#include<iostream> #include<string> #include<algorithm> using namespace std; #define n 10 string dezero(string a)//用来去掉正数前面的0,也就是说可以输入000001类似这样的数字 { long int i; for(i=0;i<a.length();i++) { if(a.at(i)>48) break; } if(i==a.length()) return "0"; a.erase(0,i); return a; } string add(string a,string b)//自然数加法 { a=dezero(a); b=dezero(b); string c; string d="0"; long int kmin,kmax,i; reverse(a.begin(),a.end()); reverse(b.begin(),b.end()); if(a.length()>b.length()) {kmin=b.length();kmax=a.length();c=a;} else {kmin=a.length();kmax=b.length();c=b;} c.insert(c.length(),d); for(i=0;i<kmin;i++) { if(a.at(i)>=48&&a.at(i)<=57) a.at(i)-=48; if(a.at(i)>=97&&a.at(i)<=122) a.at(i)-=87; if(b.at(i)>=48&&b.at(i)<=57) b.at(i)-=48; if(b.at(i)>=97&&b.at(i)<=122) b.at(i)-=87; c.at(i)=a.at(i)+b.at(i); } for(i=kmin;i<kmax+1;i++) { if(c.at(i)>=48&&c.at(i)<=57) c.at(i)-=48; if(c.at(i)>=97&&c.at(i)<=122) c.at(i)-=87; } for(i=0;i<kmax;i++) { if(c.at(i)>=n) { c.at(i+1)+=c.at(i)/n; c.at(i)=c.at(i)%n; } } if(c.at(kmax)==0) { c.erase(kmax,kmax+1); } for(i=0;i<c.length();i++) { if(c.at(i)>=10) c.at(i)+=87; if(c.at(i)<10) c.at(i)+=48; } reverse(c.begin(),c.end()); return c; } int main() { string a,b; while(cin>>a>>b) { cout<<add(a,b); } return 0; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
C++实现大数相乘算法
本文实例为大家分享了C++实现大数相乘的具体代码,供大家参考,具体内容如下 首先说一下乘法计算的算法:同样是模拟人工计算时的方法. 从低位向高位乘,在竖式计算中,我们是将乘数第一位与被乘数的每一位相乘,记录结果之后,用第二位相乘,记录结果并且左移一位,以此类推,直到计算完最后一位,再将各项结果相加,得出最后结果. 计算的过程基本上和小学生列竖式做乘法相同.为编程方便,并不急于处理进位,而将进位问题留待最后统一处理. 我们以125*53为例来说明计算过程: 1.先算125*3,3*5得到15个1,
-
C++实现大整数乘法(字符串乘法)
本文实例为大家分享了C++实现大整数乘法的具体代码,供大家参考,具体内容如下 #include<iostream> #include<algorithm> #include<string> using namespace std; string add(string a,string b) { if(a.length()==0) return b; if(b.length()==0) return a; a.length()<b.length()?a.swap(b
-
详解C++语言中的加法运算符与赋值运算符的用法
加法运算符:+ 和 - 语法 expression + expression expression – expression 备注 相加运算符为: 加 (+) 减 (–) 这些二进制运算符具有从左至右的关联性. 相加运算符采用算术或指针类型的操作数.加法 (+) 运算符的结果是操作数之和.减法 (–) 运算符的结果是操作数之差.如果一个操作数是指针或两个操作数都是指针,则它们必须是指向对象的指针,而不是指向函数的指针.如果两个操作数都是指针,则结果没有意义,除非它们是指向同一数组中的对象的指针.
-
C++自定义API函数实现大数相乘算法
前言: 之所以取题目的前部分为自定义API函数(不断更新中),是因为笔者想形成一套算法良好.接口清晰.方便编写程序的算法之意,也是为了日后更好调用算法,遇到相似的问题直接调用即可,以及方便大家使用,开发出更高效率的程序.其中的效率不敢说最好,还希望大家互相交流,共同进步!下面进入正题. 普通的乘法计算用int.long.double都可以解决,但有时候需要处理的数字过大,从而产生溢出,以下是实现任意长度的正整数A*B的算法,即大数相乘,这个算法比较简单易懂,思路如下: 1.在主函数用char型数
-
C++实现大数相乘的算法
由于数字无法用一个整形变量存储,很自然的想到用字符串来表示一串数字.然后按照乘法的运算规则,用一个乘数的每一位乘以另一个乘数,然后将所有中间结果按正确位置相加得到最终结果.可以分析得出如果乘数为A和B,A的位数为m,B的位数为n,则乘积结果为m+n-1位(最高位无进位)或m+n位(最高位有进位).因此可以分配一个m+n的辅存来存储最终结果.为了节约空间,所有的中间结果直接在m+n的辅存上进行累加. C++实现大数相乘代码如下: #include<iostream> #include<st
-
C++实现大整数乘法
算法竞赛入门经典 这本书并没有对大数乘法实现,所以自己补充了一下,乘法的实现很简单,就是再其数据结构基础上把每宽为8位的十进制数看成多项式的系数,vector的下标看成多项式的指数,然后再对应相乘相加就可以了,注意系数超过8位 将超八位的补分进位. 我这里是笛卡尔相乘.一般来说是够用的. 但其实多项式乘法算法还有很多更高效的. #include <iostream> #include <vector> #include <cstring> #include <cs
-
使用C++的string实现高精度加法运算的实例代码
对于超大数字的运算,用long long int仍然不能解决,这时候就需要考虑通过模拟运算和数组存储来实现高精度运算. 本文讨论借助C++的string来实现高精度的运算. 首先输入的量直接存储为string,设为s1和s2. 接下来设计一个反转函数,用于把整个字符串反转(为了方便后续计算). string reverseStr(string input){ string output = ""; for(int i = 0; i < input.length(); i++){
-
C++稀疏矩阵的各种基本运算并实现加法乘法
代码: #include <iostream> #include<malloc.h> #include<cstdio> using namespace std; #define M 4 #define N 4 #define MaxSize 100 typedef int ElemType; typedef struct { int r; int c; ElemType d;///元素值 } TupNode; ///三元组定义 typedef struct { int
-
C++使用string的大数加法运算(1)
本次项目目标:使用C++完成对于大数的加法运算,供大家参考,具体内容如下 项目要点 1.大数指的是远超long long int的数据 2.将大数用矩阵进行存储,并通过矩阵实现运算 3.本人采用字符串进行存储,应注意char的特点 比如: char a=161: cout<<(int)a; 此时会输出-95,而不是161,char类型首个比特位是作为正负号的 加法,此处只做自然数加法,因为存在负整数的话可以使用自然数减法来处理 运行截图及代码如下: #include<iostream&g
-
C++使用string的大数除法运算(4)
本次项目目标:使用C++完成对于大数的除法运算,供大家参考,具体内容如下 项目要点 1.大数指的是远超long long int的数据 2.将大数用矩阵进行存储,并通过矩阵实现运算 3.本人采用字符串进行存储,应注意char的特点 比如:char a=161: cout<<(int)a; 此时会输出-95,而不是161,char类型首个比特位是作为正负号的 除法,除法主要采用的还是笔算的思想,需要用到之前博客当中的减法函数minus 核心思想:比如861/21 先用86去减21 知道数值小于2
-
C++使用string的大数取模运算(5)
本次项目目标:使用C++完成对于大数的相关运算,具体有加减乘除取模. 项目要点 1.大数指的是远超long long int的数据 2.将大数用矩阵进行存储,并通过矩阵实现运算 3.本人采用字符串进行存储,应注意char的特点 比如:char a=161: cout<<(int)a; 此时会输出-95,而不是161,char类型首个比特位是作为正负号的 取模运算其实和取余差不多,主要是取模在负数方面与取余不同 需要用到之前博客提到的减法运算minus 核心思想: 先来看自然数的取模运算 与取余
-
PowerShell中的加法运算详解
大家已经PowerShell中的运算符有了一定感性的认识.我们首先来学习"+"运算符.PowerShell定义了"+"运算符处理数值类型.字符串类型.数组类型和哈希表类型的具体行为.在进行数值计算时,"+"和平时的数值计算规则基本一样.不过需要注意,由于计算机内部表示不同数值类型时,使用的存储空间不同,因此这些类型都只能表示一个范围内的数据.在进行数值运算的过程中,如果计算结果超过了参与计算数值类型的值域时,PowerShell将会自动进行类型转
-
C# 4.0 大数的运算--BigInteger的应用详解
前段时间,有个同事说 "3000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-
C++单链表实现大数加法
本文实例为大家分享了C++单链表实现大数加法,供大家参考,具体内容如下 Input Format 输入文件包括两行. 第一行包括一个正整数,保证位数不超过1000000. 第二行包括一个正整数,保证位数不超过1000000. Output Format 输出文件包括一行. 第一行包括一个正整数. Sample Input 10558 22 Sample Output 10580 #include <iostream> using namespace std; class BigData { f
-
运用指针在不用加号的情况进行加法运算的讲解
平常我们进行加法运算都是用类似以下的代码进行运算 #include<stdio.h> int main() { int a=2,b=3; printf("%d\n",a+b); return 0; } 其结果为 5,对a和b进行了加法运算 但我们如何不用加号进行加法运算呢?先看一段数组运算 #include<stdio.h> int main() { int a[]={1,2}; printf("%d\n",a[0]+a[1]); retur
-
使用Python实现图像融合及加法运算
目录 一.图像加法运算 1.Numpy库加法 2.OpenCV加法运算 二.图像融合 三.图像类型转换 一.图像加法运算 1.Numpy库加法 其运算方法是:目标图像 = 图像1 + 图像2,运算结果进行取模运算. 当像素值<=255时,结果为“图像1+图像2”,例如:120+48=168 当像素值>255时,结果为对255取模的结果,例如:(255+64)%255=64 2.OpenCV加法运算 另一种方法是直接调用OpenCV库实现图像加法运算,方法如下: 目标图像 = cv2.add(图
-
C++使用string的大数快速模幂运算(6)
本次项目目标:使用C++完成对于大数的相关运算,具体有加减乘除取模. 项目要点 1.大数指的是远超long long int的数据 2.将大数用矩阵进行存储,并通过矩阵实现运算 3.本人采用字符串进行存储,应注意char的特点 比如:char a=161: cout<<(int)a; 此时会输出-95,而不是161,char类型首个比特位是作为正负号的 模幂快速算法 a,m为正整数,将m表示为二进制形式 则 可得 举个例子 代码中有之前的减法 乘法 取模 除法运算 可得以下快速指数算法以及运行
随机推荐
- 微信小程序实现图片预加载组件
- 用批处理实现的删除特定时间以前的文件
- bootstrap-table组合表头的实现方法
- php时间计算相关问题小结
- JavaScript Sort 的一个错误用法示例
- 使用XHTML1.0 Strict中需要特别注意的地方
- 分享15款Java程序员必备的开发工具
- javascript使用window.open提示“已经计划系统关机”的原因
- 理解Sql Server中的聚集索引
- Jquery 实现grid绑定模板
- Android UI设计系列之自定义ListView仿QQ空间阻尼下拉刷新和渐变菜单栏效果(8)
- js实现方块上下左右移动效果
- Android下如何使用百度地图sdk
- C# 动画窗体(AnimateWindow)的小例子
- React 组件转 Vue 组件的命令写法
- MFC实现漂亮界面之美化按钮
- Flutter中http请求抓包的完美解决方案
- Django文件存储 默认存储系统解析
- Python定时发送消息的脚本:每天跟你女朋友说晚安
- Java使用I/O流读取文件内容的方法详解