BIGNUM - Xử lý số nguyên lớn

Tác giả: hieult

Ngôn ngữ: C++

#include <cstdlib>
#include <iostream>
using namespace std;
int a[3000],b[3000],c[3000],_a[3000],_b[3000],_c[3000],ti[3000],hi[3000],to[3000];
int a1,b1,c1,i,_a1,_b1,_c1;
int tong()
{
long tong,nho=0;
int i,j;
//int a[1000], b[1000], c[1000],a1, b1, c1;
a1=_a1;
b1=_b1;
for (i=1; i<=a1; i++) a[i]=_a[i];
for (i=1; i<=b1; i++) b[i]=_b[i];
for (i=1; i<=a1; i++) c[i]=a[i];
for (i=1; i<=a1; i++) a[i]=c[a1-i+1];
for (i=1; i<=b1; i++) c[i]=b[i];
for (i=1; i<=b1; i++) b[i]=c[b1-i+1];
if (a1>b1) c1=a1; else c1=b1;
for (i=a1+1; i<=c1; i++)a[i]=0;
for (i=b1+1; i<=c1; i++)b[i]=0;
for (i=1; i<=c1; i++)
  {
  tong=nho+a[i]+b[i];
  c[i]=tong%10;
  nho=tong/10;
  }
if (nho>0) c1++, c[c1]=nho;
for (i=1; i<=c1; i++) a[i]=c[i];
for (i=1; i<=c1; i++) c[i]=a[c1-i+1];
for (i=1; i<=c1; i++) to[i]=c[i];
to[0]=c1;
}
int _hieu()
{
//int a[1000], b[1000], c[1000], a1, b1, c1;
long tong,nho=0,dau=1;
int i,j,tg;
a1=_a1;
b1=_b1;
for (i=1; i<=a1; i++) a[i]=_a[i];
for (i=1; i<=b1; i++) b[i]=_b[i];
for (i=1; i<=a1; i++) c[i]=a[i];
for (i=1; i<=a1; i++) a[i]=c[a1-i+1];
for (i=1; i<=b1; i++) c[i]=b[i];
for (i=1; i<=b1; i++) b[i]=c[b1-i+1];
if (a1>b1) c1=a1; else c1=b1;
for (i=a1+1; i<=c1; i++)a[i]=0;
for (i=b1+1; i<=c1; i++)b[i]=0;
for (i=c1; i>=1; i--)
if (a[i]!=b[i]){
if (a[i]<b[i])dau=-1; else dau=1;
break;
}
if (dau==-1){
for (i=1; i<=c1; i++){
tg=a[i];
a[i]=b[i];
b[i]=tg;
}
}
for (i=1; i<=c1; i++){
tong=10+nho+a[i]-b[i];
c[i]=tong%10;
if (tong/10>0) nho=0; else nho=-1;
}
while (c[c1]==0& c1>1)c1--;
for (i=1; i<=c1; i++) a[i]=c[i];
for (i=1; i<=c1; i++) c[i]=a[c1-i+1];
hi[c1+1]=dau;
hi[0]=c1;
for (i=1; i<=c1; i++) hi[i]=c[i];
}
int tich(){
//int a[1000], b[1000], c[1000], a1, b1, c1;
long tong=0,nho=0;
int i,j;
a1=0;b1=0;c1=0;
a1=_a1;
b1=_b1;
tong=0; nho=0;
for (i=1; i<=a1; i++) a[i]=_a[i];
for (i=1; i<=b1; i++) b[i]=_b[i];
for (i=1; i<=a1; i++) c[i]=a[i];
for (i=1; i<=a1; i++) a[i]=c[a1-i+1];
for (i=1; i<=b1; i++) c[i]=b[i];
for (i=1; i<=b1; i++) b[i]=c[b1-i+1];
c1=a1+b1;
for (i=1; i<=c1; i++) c[i]=0;
for (i=1; i<=c1; i++){
tong=nho;
for (j=1; j<=i; j++)
tong = tong + a[j]*b[i+1-j];
c[i]=tong%10;
nho=tong/10; 
}
if (nho>0) c[c1]=nho;
if (c[c1]==0) c1--;
for (i=1; i<=c1; i++) a[i]=c[i];
for (i=1; i<=c1; i++) c[i]=a[c1-i+1];
ti[0]=c1;
for (i=1; i<=c1; i++) ti[i]=c[i];
}
int nhap(){
string st1,st2;
char ch='a';
cin>>st1;
cin>>st2;
a1=st1.length();
b1=st2.length();
for (i=0; i<a1; i++) a[i+1]=short(st1[i])-48;
for (i=0; i<b1; i++) b[i+1]=short(st2[i])-48;
for (i=1; i<=a1; i++) _a[i]=a[i];
for (i=1; i<=b1; i++) _b[i]=b[i];
_a1=a1;
_b1=b1;
}
int thu(){
tich();
tong(); 
_hieu();
for(i=1; i<=to[0]; i++) cout<<to[i]; cout<<endl;
if (hi[hi[0]+1]==-1) cout<<"-";
for(i=1; i<=hi[0]; i++) cout<<hi[i]; cout<<endl;
for(i=1; i<=ti[0]; i++) cout<<ti[i]; 
}
int main(int argc, char *argv[])
{
nhap();
thu();
//system("PAUSE");
return(0);
}

Download