Pagini recente » Cod sursa (job #2854809) | Cod sursa (job #2686079) | Cod sursa (job #2362557) | Cod sursa (job #2232806) | Cod sursa (job #1720250)
#include <fstream>
using namespace std;
ifstream in("adunare.in");
ofstream out("adunare.out");
class int_huge
{
public:
int_huge() {}
int_huge operator+(int_huge &object)
{
int_huge solution,B;
for(int i=0;i<5010;++i) solution.number[i]=0;
for(int i=0;i<5010;++i) B.number[i]=0;
bool ok=false;
if(this->semn==0 and object.semn==1)
{
if(this->number[0]>object.number[0]) ok=true;
else if(this->number[0]==object.number[0])
for(int i=this->number[0];i>0;--i)
{
if(this->number[i]>=object.number[i])
{
ok=true;
i=0;
}
else if(this->number[i]<object.number[i])
{
ok=false;
i=0;
}
}
if(ok==true)
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
else
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
B.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
solution.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
}
else if(this->semn==1 and object.semn==0)
{
if(this->number[0]>object.number[0]) ok=true;
else if(this->number[0]==object.number[0])
for(int i=this->number[0];i>0;--i)
{
if(this->number[i]>=object.number[i])
{
ok=true;
i=0;
}
else if(this->number[i]<object.number[i])
{
ok=false;
i=0;
}
}
if(ok==true)
{
solution.semn=0;
for(int i=0;i<=object.number[0];++i)
{
solution.number[i]=object.number[i];
}
for(int i=0;i<=this->number[0];++i)
{
B.number[i]=this->number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
else
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
B.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
solution.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
}
if(this->semn==1 and object.semn==1)
{
solution.semn=1;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j,t=0;
for(j=1;j<=solution.number[0] or j<=B.number[0] or t;++j,t/=10)
{
t+=solution.number[j]+B.number[j];
solution.number[j]=t%10;
}
solution.number[0] = j-1;
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
else if(this->semn==0 and object.semn==0)
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j,t=0;
for(j=1;j<=solution.number[0] or j<=B.number[0] or t;++j,t/=10)
{
t+=solution.number[j]+B.number[j];
solution.number[j]=t%10;
}
solution.number[0] = j-1;
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
}
int_huge operator-(int_huge &object)
{
int_huge solution,B;
for(int i=0;i<5010;++i) solution.number[i]=0;
for(int i=0;i<5010;++i) B.number[i]=0;
if(this->semn==1 and object.semn==1)
{
bool ok=false;
if(this->number[0]>object.number[0]) ok=true;
else if(this->number[0]==object.number[0])
for(int i=this->number[0];i>0;--i)
{
if(this->number[i]>=object.number[i])
{
ok=true;
i=0;
}
else if(this->number[i]<object.number[i])
{
ok=false;
i=0;
}
}
if(ok==true)
{
solution.semn=1;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
return solution;
}
else
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
B.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
solution.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
return solution;
}
}
else if(this->semn==0 and object.semn==0)
{
bool ok=false;
if(this->number[0]>object.number[0]) ok=true;
else if(this->number[0]==object.number[0])
for(int i=this->number[0];i>0;--i)
{
if(this->number[i]>=object.number[i])
{
ok=true;
i=0;
}
else if(this->number[i]<object.number[i])
{
ok=false;
i=0;
}
}
if(ok==true)
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
else
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
B.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
solution.number[i]=object.number[i];
}
int j, t = 0;
for (j = 1; j <= solution.number[0]; j++) {
solution.number[j] -= ((j <= B.number[0]) ? B.number[j] : 0) + t;
solution.number[j] += (t = solution.number[j] < 0) * 10;
}
for (; solution.number[0] > 1 && !solution.number[solution.number[0]]; solution.number[0]--);
for(int i=0;i<=solution.number[0];++i)
{
solution.number[i]=solution.number[i];
}
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
}
else if(this->semn==0 and object.semn==1)
{
solution.semn=0;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j,t=0;
for(j=1;j<=solution.number[0] or j<=B.number[0] or t;++j,t/=10)
{
t+=solution.number[j]+B.number[j];
solution.number[j]=t%10;
}
solution.number[0] = j-1;
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
else if(this->semn==1 and object.semn==0)
{
solution.semn=1;
for(int i=0;i<=this->number[0];++i)
{
solution.number[i]=this->number[i];
}
for(int i=0;i<=object.number[0];++i)
{
B.number[i]=object.number[i];
}
int j,t=0;
for(j=1;j<=solution.number[0] or j<=B.number[0] or t;++j,t/=10)
{
t+=solution.number[j]+B.number[j];
solution.number[j]=t%10;
}
solution.number[0] = j-1;
if(solution.number[solution.number[0]]==0)
solution.semn=1;
return solution;
}
}
void printNumber();
void readNumber();
private:
short number[5010];
bool semn;
};
void int_huge::printNumber()
{
if(this->semn==0) out<<"-";
for(int i=this->number[0];i>0;--i)
{
out<<this->number[i];
}
}
void int_huge::readNumber()
{
char c;
c=in.get();
this->number[0]=0;
if(c=='-')
{
this->semn=0;
c=in.get();
}
else this->semn=1;
while(c!='\n' and c!=NULL)
{
this->number[0]++;
this->number[this->number[0]]=c-'0';
c=in.get();
}
for(int i=1;i<=this->number[0]/2;++i)
{
this->number[i]^=this->number[this->number[0]-i+1]^=this->number[i]^=this->number[this->number[0]-i+1];
}
}
int main()
{
int_huge a,b,c;
a.readNumber();
b.readNumber();
(a+b).printNumber();
return 0;
}