C++ string 实现大整数相加减
来源:互联网 发布:iis配置php 编辑:程序博客网 时间:2024/04/27 21:38
任意两个大整数的加减算法,可自动判断正负号,代码如下:
#include <iostream>#include <vector>#include <cstring>#include <algorithm>#include <string>using namespace std;string BigInegerAdd(string s1, string s2) // s1+s2;{int len = s1.size()>s2.size()?s1.size()+1:s2.size()+1;string res(len, '0');int i = s1.size() - 1, j = s2.size() - 1, k = len - 1;int borrow = 0;while(i >=0 && j >= 0){int sum = s1[i] - '0' + s2[j] - '0' + borrow;if (sum >= 10){borrow = 1;sum -= 10;res[k--] = sum + '0';}else {res[k--] = sum + '0'; borrow = 0;}i--;j--;}while(i >= 0){int sum = s1[i] - '0' + borrow;if (sum >= 10){borrow = 1;sum -= 10;res[k--] = sum + '0';}else {res[k--] = sum + '0'; borrow = 0;}i--;}while(j >= 0){int sum = s2[j] - '0' + borrow;if (sum >= 10){borrow = 1;sum -= 10;res[k--] = sum + '0';}else {res[k--] = sum + '0'; borrow = 0;}j--;}if (borrow == 1){res[k] = '1';}else res[k] = '0';if (res[0] == '0')//ignore the prefix '0's{return res.substr(1, res.size()-1);}else return res;}//negative == true means s1 < s2string BigInegerMinus(string s1, string s2, bool negative) // s1-s2; {if (s1.size() < s2.size()){return BigInegerMinus(s2, s1, true);}if (s1.size() == s2.size()){int i = 0;while(i < s1.size() && s1[i] == s2[i])i++;if (s1[i] < s2[i]){return BigInegerMinus(s2, s1, true);}}string res(s1.size(), '0');int i = s1.size() -1, j = s2.size() - 1;int k = i;int borrow = 0;while(i >= 0 && j >= 0){int sum = s1[i] - '0' - borrow - (s2[j] - '0');//cout<<sum<<endl;if (sum < 0){borrow = 1;sum += 10;res[k--] = sum + '0';}else{borrow = 0;res[k--] = sum + '0';}i--;j--;}while(i >= 0){int sum = s1[i--] - '0' - borrow;if (sum < 0){borrow = 1;sum += 10;res[k--] = sum + '0';}else{borrow = 0;res[k--] = sum + '0';}}if (res[0] == '0'){//ignore the prefix '0'sint index = 1;while(index < res.size() && res[index] == '0')index++;if (negative){return "-" + res.substr(index, res.size() - index);}else return res.substr(index, res.size() - index);}else {if (negative){return "-" + res;}else return res;}}string BigIneger(string s1, string s2){if (s1 == ""){return s2;}if (s2 == ""){return s1;}char sign1 = '+', sign2 = '+';if (s1[0] == '-'){ sign1 = '-';}if (s2[0] == '-'){sign2 = '-';}if (sign1 == '+' && sign2 == '+'){return BigInegerAdd(s1, s2);}else if (sign1 == '+' && sign2 == '-'){return BigInegerMinus(s1, s2.substr(1, s2.size()-1),false);}else if (sign1 == '-' && sign2 == '+'){return BigInegerMinus(s2, s1.substr(1, s1.size()-1), false);}else {string tmp = BigInegerAdd(s1.substr(1, s1.size()-1), s2.substr(1, s2.size()-1));if (tmp[0] == '0'){tmp = tmp.substr(1, tmp.size()- 1);}string res = "-" + tmp;return res;}}int main(){string s1 = "-789546321", s2 = "-15462897444";cout<<BigIneger(s1,s2)<<endl;return 0;}
0 0
- C++ string 实现大整数相加减
- C 大整数相加
- Java实现大整数相加相减
- Java实现大整数相加
- java实现大整数相加
- Java实现大整数相加
- 大整数相加--c++实现
- C++大整数相加减
- 用栈实现大整数的相加与相减
- C++实现两个大整数相加
- MySQL实现大整数相加的udf
- 特大整数相加(C实现)
- HDOJ 1002 A + B Problem II 大整数相加高效率版的C语言实现
- 关于大整数相加与相减
- 大整数相加算法
- 大整数相加
- 大整数相加问题
- 大整数相加
- java I/O流
- 好用的PDF转换PPT软件推荐
- Cracking coding interview(3.5)使用2个堆栈实现一个队列
- BigDecimal.setScale()方法
- 25留数及其应用(一)
- C++ string 实现大整数相加减
- .NET技术+25台服务器怎样支撑世界第54大网站
- 如何找工作使用Java
- 如何在印度选择最好的移动游戏开发公司
- 第一个CUDA项目(LNK1123 failure during conversion to coff file invalid or corrupt)
- JS封装类似JAVA中的MAP
- Java for循环的几种用法分析
- android之Fragment(官网资料翻译)
- VB.NET Sub创建方法简介