51nod 1005: 大数加法(含符号)

2024-04-05 23:58
文章标签 符号 大数 51nod 加法 1005

本文主要是介绍51nod 1005: 大数加法(含符号),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1005 大数加法
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
收藏
关注
给出2个大整数A,B,计算A+B的结果。
Input
第1行:大数A
第2行:大数B
(A,B的长度 <= 10000 需注意:A B有可能为负数)
Output
输出A + B
Input示例
68932147586
468711654886
Output示例
537643802472

#include<bits/stdc++.h>
using namespace std;
string bigSub(const string a,const string b){int lena = a.size();int lenb = b.size();int max_len = lena > lenb ? lena : lenb;vector<char> res;res.resize(max_len);int flag = 1;//默认a大于等于bif(lena < lenb || (lena == lenb && a < b)){flag = 0;//b > a}if(flag){ // a >= b时候 for(int i = 0; i < lenb; ++i){res[i] = a[lena-i-1]-b[lenb-i-1];//保存结果}for(int i = lenb; i < lena; ++i){//a 的高位直接拿下来res[i] = a[lena-i-1]-'0';}}else{//如果a < bfor(int i = 0; i < lena; ++i){res[i] = b[lenb-i-1]-a[lena-i-1];}for(int i = lena; i < lenb; ++i){//b的高位直接放下来res[i] = b[lenb-i-1]-'0';}}for(int i = 0; i < max_len; ++i){//对结果进行借位处理if(res[i] < 0){res[i] += 10;res[i+1] -= 1;}}string r = "";if(!flag) //确定结果符号 r += "-";int k;	for(k = max_len-1; k >= 0; --k){ //过滤掉前缀 0 if(res[k] != 0) break;}if(k == -1){ //当两个数之差 为 0 时候 保存 0值 return r += '0';//差值为0}for(; k >= 0; --k){//结果不为0时候记录结果r += res[k]+'0';}return r;}string bigAdd(const string a,const string b){int lena = a.size();int lenb = b.size();int lensum = lena > lenb ? lena+1 : lenb+1;vector<char> res;res.resize(lensum);		for(int i = 0,j = 0; i < lena && j < lenb; ++i,++j){res[i] = a[lena-i-1]-'0' + b[lenb-i-1]-'0';}if(lena > lenb){for(int i = lenb; i < lena; ++i){res[i] = a[lena-i-1]-'0';}}else if(lenb > lena){for(int i = lena; i < lenb; ++i){res[i] = b[lenb-i-1]-'0';}}for(int i = 0; i < lensum-1; ++i){if(res[i] > 9){int t = res[i]/10;res[i] = res[i]%10;res[i+1] += t;}}string r = "";if(res[lensum-1]){//判断是否进位到最高位r += res[lensum-1]+'0';}for(int i = lensum-2; i >= 0; --i){//这里是lensum-2 r += res[i]+'0';}	return r;		}string getSum(const string a,const string b){string res;if(a[0] == b[0] && a[0] == '-'){//两个数都是负数res  = "-" + bigAdd(a.substr(1),b.substr(1));}if(a[0] != '-' && b[0] != '-'){//都为正数res = bigAdd(a,b);}if((a[0]=='-'&&b[0]!='-') || (a[0] != '-' && b[0] =='-')){//异号相加 转化为 减法运算if(a[0] == '-'){res = bigSub(b,a.substr(1));}else{res = bigSub(a,b.substr(1));}}return res;	}	
int main(){string a, b;cin >> a >> b;//cout << bigSub(a,b);cout << getSum(a,b);return 0;}

这篇关于51nod 1005: 大数加法(含符号)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/878504

相关文章

uva 10069 DP + 大数加法

代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <cl

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a

找第K大数(ACdream 1099)

瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others)  Memory Limit: 256000/128000KB (Java/Others) Submit  Statistic  Next Problem Problem Description 一天,萌萌的妹子--瑶瑶(tsyao)很无聊,就来找你玩。可是你们都不知道玩什么。。。

【OpenCV2.2】图像的算术与位运算(图像的加法运算、图像的减法运算、图像的融合)、OpenCV的位运算(非操作、与运算、或和异或)

1 图像的算术运算 1.1 图像的加法运算 1.2 图像的减法运算 1.3 图像的融合 2 OpenCV的位运算 2.1 非操作 2.2 与运算 2.3 或和异或 1 图像的算术运算 1.1 图像的加法运算 add opencv使用add来执行图像的加法运算 图片就是矩阵, 图片的加法运算就是矩阵的加法运算, 这就要求加法运算的两张图shape必须是相同的. # 图片加法imp

【流程图】流程图符号

1、常用符号 2、例子(胡乱画的)

有符号和无符号的转化

1.无符号转有符号 测试结果: 2.有符号转换为无符号数 测试结果: 其他

流程图符号速查:快速掌握流程图绘制要点

流程图是一种以图形化方式表示算法或过程的步骤和逻辑关系的图表,它通过使用一系列标准的符号和连接线来清晰地展示流程的顺序和决策点。这种表示方法不仅使得复杂的过程更加易于理解,而且也便于跟踪和优化。以下是对流程图的进一步扩写,包括其制作步骤、应用场景和一些实用技巧。流程图常常用来表示一些动态过程,通常会有一个“起点”, 可以有一个或多个终点,流程图可以直观、明确地表示动态过程从开始到结束的全部步骤,在