Загрузка данных


#include <iostream>
#include <vector>
using namespace std;
#define PB push_back
typedef vector <int> big;
istream& operator >> (istream& stream, big& a){
	string s; stream >> s;
	for (int i=s.size()-1; i>=0; i--) a.PB(s[i]-'0');
	return stream;
}
ostream& operator << (ostream& stream, big a){
	for (int i = a.size()-1; i>=0;i--) stream << a[i];
	return stream;
}
bool operator > (big a, big b){
	if (a.size()>b.size()) return true;
	if (a.size() < b.size()) return false;
	for (int i=a.size()-1; i>=0; i--){
		if (a[i]>b[i]) return true;
		if (a[i]<b[i]) return false;
	}
}
big operator +(big a, big b){
	big c; int i, r=0;
	for (i=0;i<a.size() or i<b.size();i++){
		if (i<a.size()) r+=a[i];
		if (i<b.size()) r+=b[i];
		c.PB(r%10); r/=10;
	}
	if (r) c.PB(r);
	return c;
}
big operator - (big a, big b){
	big c; int i, r=0;
	for (i=0; i<a.size(); i++){
		r+=a[i];
		if (i<b.size()) r-=b[i];
		if (r<0) {
			c.PB(r+10); r-=1;}
			else {c.PB(r%10); r=0;}
		}
		while (c.size()>1 and c.back() ==0) c.pop_back() ;
		return c;
	}
	int main () {
		big a,b;
		cin>>a>>b;
		if (b>a){
			cout<<"-";
			swap (a,b);
		}
		cout <<a-b;
		return 0;
	}