Pagini recente » Cod sursa (job #2585747) | Cod sursa (job #846039) | Cod sursa (job #1477848) | Cod sursa (job #2740355) | Cod sursa (job #2106143)
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
int comparare(short int a[1000001],short int b[1000001])
{
int i;
if (a[0]<b[0])
{
return 2;
}
else
if (a[0]>b[0])
{
return 1;
}
else
{
for (i=1;i<=a[0];i++)
{
if (a[i]>b[i])
{
return 1;
}
else
if (a[i]<b[i])
{
return 2;
}
}
}
return 0;
}
void scadere (short int a[1000001],short int b[1000001])
{
int t=0,i;
for (i=1;i<=a[0];i++)
{
a[i]=(a[i]-b[i]-t);
if (a[i]<0)
{
t=1;
}
else
{
t=0;
}
if (t==1)
{
a[i]+=10;
}
}
if (t==1)
{
a[a[0]]-=t;
if (a[a[0]]==0)
{
a[0]--;
}
}
else
if (a[a[0]]==0)
{
a[0]--;
}
}
void shl (short int a[1000001],short int nrp)
{int i;
for (i=nrp+1;i<=a[0]+nrp;i++)
{
a[i]=a[i-nrp];
}
a[0]=a[0]+nrp;
}
void impartire(short int a[1000001],short int b[1000001],short int c[1000001],short int r[1000001])
{
int i;
c[0]=a[0];
for (i=a[0];i>=1;i--)
{
shl(r,1);
r[1]=a[i];
while (comparare(b,r)!=1)
{
c[i]++;
scadere(r,b);
}
}
while (!c[c[0]]&&c[0]>1)
{
c[0]--;
}
}
void inmultire(short int a[1000001],short int b[1000001],short int c[1000001])
{
int i,j,T=0;
c[0]=a[0]+b[0]-1;
for (i=1;i<=a[0];i++)
for (j=1;j<=b[0];j++)
c[i+j-1]+=a[i]*b[j];
for (i=1;i<=c[0];i++)
{ T=(c[i]+=T)/10;
c[i]%=10;
}
if (T) c[++c[0]]=T;
}
short int a[1000001],b[1000001],c[1000001],r[1000001],d[1000001],ccc;
int i,n,m;
char cc,s[1000001];
int main()
{
f.getline (s,1000001);
a[0]=strlen(s);
for (i=0;i<strlen(s);i++)
{
a[a[0]-i]=s[i]-'0';
}
f.getline (s,1000001);
b[0]=strlen(s);
for (i=0;i<strlen(s);i++)
{
b[b[0]-i]=s[i]-'0';
}
impartire (a,b,c,r);
int t=0;
if (r[1]!=0)
{
for (i=1;i<=c[0];i++)
{
if (i==1)
{
ccc=c[i];
c[i]=(c[i]+1+t)%10;
t=(ccc+1+t)/10;
}
else
{
ccc=c[i];
c[i]=(c[i]+t)%10;
t=(ccc+t)/10;
}
}
c[0]+=t;
c[c[0]]+=t;
}
inmultire (b,c,d);
for (i=d[0];i>=1;i--)
{
g<<d[i];
}
return 0;
}