题目链接:https://www.acwing.com/problem/content/description/794/
时/空限制:1s / 64MB
题目描述
给定两个正整数,计算它们的差,计算结果可能为负数。
输入格式
共两行,每行包含一个整数。
输出格式
共一行,包含所求的差。
数据范围
1≤整数长度≤10^5
输入样例
32
11
输出样例
21
解题思路
题意:求两个大数的差。
思路:上大数减法模板,注意负数的情况。
Accepted Code:
/*
* @Author: lzyws739307453
* @Language: C++
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100005;
char sa[MAXN], sb[MAXN];
int vectcmp(vector <int> A, vector <int> B) {
if (A.size() != B.size()) {
if (A.size() > B.size())
return 1;
return -1;
}
for (int i = A.size() - 1; ~i; i--) {
if (A[i] != B[i]) {
if (A[i] > B[i])
return 1;
return -1;
}
}
return 0;
}
// C = A - B, 满足A >= B, A >= 0, B >= 0
vector <int> Sub(vector <int> A, vector <int> B) {
vector <int> C;
int t = 0;
for (int i = 0; i < A.size(); i++) {
t = A[i] - t;
if (i < B.size())
t -= B[i];
C.push_back((t + 10) % 10);
t = t < 0;
}
while (C.size() > 1 && !C.back()) C.pop_back();
return C;
}
int main() {
vector <int> spa, spb, spc;
scanf("%s%s", sa, sb);
for (int i = strlen(sa) - 1; ~i; i--)
spa.push_back(sa[i] - '0');
for (int i = strlen(sb) - 1; ~i; i--)
spb.push_back(sb[i] - '0');
if (vectcmp(spa, spb) < 0) {
spc = Sub(spb, spa);
printf("-");
}
else spc = Sub(spa, spb);
for (int i = spc.size() - 1; ~i; i--)
printf("%d", spc[i]);
printf("\n");
return 0;
}