Решение задачи Длинное произведение с Acmp

Без пояснения   Просмотров: 11



Код


    #include<iostream> 

#include<iomanip> 

#include<string> 

#include<vector> 

#define PB push_back 

#define ll long long 

using namespace std; 

typedef vector<int> lll; 

const long long e=1000000000, k=9; 


istream& operator >>(istream& stream,lll& a){ 

string s,r; stream>>s; 

for(int i=s.size();i>0;i-=k){ 

int j=i-k; 

if(j>=0)r=s.substr(j,k); else r=s.substr(0,i); 

a.PB(stoi(r));} 

return stream; 

} 

ostream& operator <<(ostream& stream,lll a){ 

stream<<a[a.size()-1]; 

for(int i=a.size()-2;i>=0;--i)stream<<setw(9)<<setfill('0')<<a[i]; 

return stream;} 

bool operator >(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 operator +(lll a,lll b){ 

lll c; 

int i,r=0; 

if(a.size()<b.size())swap(a,b); 

for(i=0;i<a.size();i++){ 

if(i<a.size())r+=a[i]; 

if(i<b.size())r+=b[i]; 

c.push_back(r%e); 

r/=e; 

} 

if(r) c.push_back(r); 

return c;} 

lll operator -(lll a,lll b){ 

lll 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&&c.back()==0)c.pop_back(); 

return c;} 


lll operator *(lll a,ll b){ 

lll c;int i;ll r=0; 

if(b==0){c.PB(0);return c;} 

for(i=0;i<a.size();++i){ 

r+=a[i]*b; 

c.PB(r%e);r/=e;} 

while(r){c.PB(r%e);r/=e;} 

return c;} 



lll operator *(lll a,lll b){ 

lll c,d(1,0);int i,j; 

if(a==d||b==d)return d; 

if(b.size()>a.size())swap(a,b); 

for(i=0;i<b.size();++i){ 

c=a*b[i]; 

for(j=0;j<i;j++)c.insert(c.begin(),0); 

d=d+c;} 

return d;} 

ll operator % (lll a,ll b) { 

lll c; 

int i; 

ll r=0,t; 

for(i=a.size()-1;i>=0;i--){ 

r=r*10+a[i]; 

t=r/b; 

r-=t*b; 

} 

return r; 

} 

lll operator /(lll a,ll b){ 

lll c; 

int i; 

ll r=0,t; 

for(i=a.size()-1;i>=0;i--){ 

r=r*10+a[i]; 

t=r/b; 

c.insert(c.begin(),t); 

r-=t*b; 

} 

while(c.size()>1&&c[c.size()-1]==0) 

c.resize(c.size()-1); 

return c; 

} 



int main() 

{ 

lll a,b; 

cin>>a>>b; 

cout<<a*b; 

}   
        

         

Администратор Photo Автор: Администратор



Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться