您的位置:首页 > 编程语言 > C语言/C++

11:大整数减法[模版]

2017-07-25 09:01 369 查看
11:大整数减法[模版]总时间限制: 1000ms 内存限制: 65536kB描述求两个大的正整数相减的差。输入共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。输出一行,即所求的差。样例输入
9999999999999999999999999999999999999
9999999999999
样例输出
9999999999999999999999990000000000000
#include <iostream>#include <vector>#include <stdio.h>#include <algorithm>#include <iomanip>#include <string>#include <cstdio>#include <string.h>#include <set>#include <cmath>#include <map>#include <stack>#include <stdlib.h>#define MAX_LEN 200using namespace std;//两个大数相减的模版string sub(string str1, string str2){//cout << str1 << endl << str2 << endl;int flag = 0;if(str1.length() < str2.length() || (str1.length() == str2.length() && str1 < str2)){flag = 1;string temp = str1;str1 = str2;str2 = temp;}int i, j;for(i = str1.length() - 1, j = str2.length() - 1; i >= 0; i--, j--){str1[i] = char(str1[i] - (j >= 0 ? str2[j] - '0' : 0));if(str1[i] - '0' < 0){str1[i] = char(str1[i] + 10);str1[i - 1]--;}}//从前往后找 找到第一个不为0的位置 用于下面截子串for(i = 0; i < str1.length(); i++){if(str1[i] != '0'){break;}}//消除多余的0//如果此时i = lengh 即是这一种情况//如果会是这样的99999999999 - 99999999999  = 00000000000if(i == str1.length()){i = str1.length() - 1;}//截子串str1 = str1.substr(i);if(flag){str1 = "-" + str1;}return str1;}int main(){//freopen("in.txt", "r", stdin);//freopen("out.txt", "w", stdout);string str1,str2;cin >> str1 >> str2;cout << sub(str1, str2);return 0;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cpp 水题 大整数相减