题目描述
编写程序,输入两个正整数,1≤整数长度≤100000,输出它们的差。
输入输出说明
输入说明
共两行,包含两个整数。
输出说明
共一行,包含计算结果(若为负数,要输出负号)。
题目样例
样例输入
2147483648
2147483649
样例输出
-1
数据范围
- 对于 100% 的数据,满足1≤整数长度≤100000。
代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
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 1;
}
vector<int> sub(vector<int> A,vector<int> B){
vector<int> C;
reverse(A.begin(),A.end());
reverse(B.begin(),B.end());
int t=0,x=0;
for(int i=0;i<A.size();i++){
x=A[i]-t;
if(i<B.size()) x-=B[i];
if(x<0){
x+=10,t=1;
}else t=0;
C.push_back(x);
}
while(C.size()>1&&C.back()==0) C.pop_back();
reverse(C.begin(),C.end());
return C;
}
int main(){
vector<int> A,B,C;
string a,b;
cin>>a>>b;
for(auto c:a) A.push_back(c-'0');
for(auto c:b)B.push_back(c-'0');
if(cmp(A,B)){
C=sub(A,B);
}else{
cout<<"-";
C=sub(B,A);
}
for(int i=0;i<C.size();i++) cout<<C[i];
return 0;
}