Pagini recente » Cod sursa (job #2596422) | Cod sursa (job #1712088) | Cod sursa (job #2582978) | Cod sursa (job #707347) | Cod sursa (job #257393)
Cod sursa(job #257393)
#include<stdio.h>
#include<string.h>
struct GigaNumber
{
int overflow;
char number[200000];
void plus()
{
int i=0;
int mrt=0;
if(number[i]=='9')
{
number[i]='0';
mrt=1;
}
else
++number[i];
++i;
while(mrt)
{
mrt=0;
if(number[i]=='9')
{
number[i]='0';
mrt=1;
}
else
{
if(i>=overflow)
overflow=i+1;
if(number[i])
++number[i];
else
number[i]='1';
break;
}
++i;
if(i>=overflow)
overflow=i+1;
}
}
};
GigaNumber n;
void mult(long long d)
{
int j,i,k=0,next,a,b,ln;
ln=n.overflow;
char buffer[500000];
strcpy(buffer,n.number);
memset(n.number,48,sizeof(n.number));
while(d)
{
b=d%10;
next=0;
if(b)
for(i=k;i<ln+k;++i)
{
a=buffer[i-k]-48;
a*=b;
a+=next;
a%=10;
j=i;
while(a&&j<n.overflow)
{
b=n.number[j]-48;
a+=b;
b=a%10;
a/=10;
n.number[j]=b+48;
++j;
}
if(a)
{
n.number[n.overflow]=a+48;
n.overflow;
}
next=a/10;
}
if(next)
{
n.number[n.overflow]=next;
++n.overflow;
}
d/=10;
++k;
if(d)
++n.overflow;
}
}
void append_decomp(GigaNumber &v,long long a[],int na)
{
int i;
v.overflow=0;
for(i=na-1;i>=0;--i)
{
while(a[i])
{
v.number[v.overflow++]=(a[i]%10)+48;
a[i]/=10;
}
}
}
int imparte(GigaNumber &v,long long dp)
{
int i=v.overflow-1,nr=0;
long long r,aux=0,a[10000];
while(i>0)
{
while(aux<dp)
{
aux=aux*10+v.number[i]-48;
--i;
}
r=aux%dp;
aux/=dp;
a[nr++]=aux;
}
append_decomp(v,a,nr);
}
void outfile(GigaNumber a)
{
for(int i=a.overflow-1;i>=0;--i)
printf("%c",a.number[i]);
}
int main()
{
int nr=0,i;
char aux;
long long dimprt=0;
freopen("next.in","r",stdin);
freopen("next.out","w",stdout);
scanf("%c",&aux);
do
{
n.number[nr]=aux;
++nr;
scanf("%c",&aux);
}
while(aux!='\n');
int st=0;
int dr=nr-1;
while(st<dr)
{
aux=n.number[st];
n.number[st]=n.number[dr];
n.number[dr]=aux;
st++;
dr--;
}
//gets(n.number);
/*gets(buffer);
nr=strlen(buffer);
for(i=nr-1;i>=0;--i)
n.number[nr-i-1]=buffer[i]-48;
*/
n.overflow=nr;
scanf("%lld",&dimprt);
imparte(n,dimprt);
n.plus();
mult(dimprt);
outfile(n);
}