思路
- 确保相减时,被减数大于等于减数 ( a - b >= 0 ) 如果前面数小,结果加上符号就行
- 设置一个 变量记录进位情况
- 对于结果为个位数,比如 123 - 120 = 003, 需要去掉前导0
(需要实现2个函数)
代码
#include<iostream>
#include<vector>
using namespace std;
//判断是否 A >= B
bool cmp(vector<int> &A, vector<int> &B)
{
//首先判断位数
if(A.size() != B.size()) return A.size() > B.size();
for(int i = A.size() - 1; i >= 0; i --)
{
if(A[i] != B[i]) return A[i] >B[i];
}
return true;//此时 A == B
}
// c = A - B
vector<int> sub(vector<int> &A, vector<int> &B)
{
vector <int> c;
for(int i = 0, t = 0; i < A.size() ; i ++) // A.size() >= B.size()
{
t = A[i] - t;
if(i < B.size()) t -= B[i];
c.push_back( (t + 10) % 10); // t 和 t + 10 整合成一个式子
if(t < 0) t = 1; // t是否进位
else t = 0;
}
// 去掉前导0
while(c.size() > 1 && c.back() == 0) c.pop_back();
return c;
}
int main()
{
string a, b;
vector <int> A, B;
cin >> a >> b;
for(int i = a.size() - 1; i >= 0; i --)
{
A.push_back(a[i] - '0');
}
for(int i = b.size() - 1; i >= 0; i --)
{
B.push_back(b[i] - '0');
}
if(cmp(A,B)) // 确保A > B
{
auto c = sub(A, B);
for(int i = c.size() - 1; i >= 0; i --) printf("%d", c[i]);
}
else
{
auto c = sub(B, A);
printf("-") ;
for(int i = c.size() - 1; i >= 0; i --) printf("%d", c[i]);
}
return 0;
}
`
这个题如果用python ,只需要一行代码!!!!!😲 我哭了
print(int(input())-int(input()))