Решение задачи №143 «A-B» с ACMP





Решение задачи №143 «A-B» с ACMP

Условие задачи

Требуется найти разность между неотрицательными числами А и В.

Входные данные
Во входном файле INPUT.TXT в двух строках записаны два неотрицательных целых числа A и B, не превышающие 101000.

Выходные данные
В выходной файл OUTPUT.TXT выведите значение A-B.

#include<iostream>
#include<vector>
using namespace std;
typedef vector<int> lll;
lll readlong(){ lll a; string s; cin>>s;
for(int i=s.size()-1; i>=0; --i)
a.push_back(s[i]-'0');
return a;}
void writelong(lll a){
for(int i=a.size()-1; i>=0; --i)cout<<a[i];}
bool GTlong(lll a,lll 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;}
return false;}
lll razlong(lll a, lll b,int &z){
lll c; int i,r=0;
if(GTlong(b,a)){z=-1;swap(a,b);}else z=1;
for(i=0;i<a.size(); ++i){
r+=a[i];
if(i<b.size())r-=b[i];
if(r<0){c.push_back(r+10);r=-1;}
else {c.push_back(r);r=0;}}
while(c.size()>1&&c.back()==0)c.pop_back();
return c;}
int main() {
lll a,b,c; int z;
a=readlong (); b=readlong ();
c=razlong(a,b,z);
if(z<0)cout<<'-';
writelong(c);
return 0;}



Условия задач взяты с сайта acmp.ru