Pagini recente » Cod sursa (job #928644) | Cod sursa (job #2344203) | Cod sursa (job #516380) | Cod sursa (job #1499797) | Cod sursa (job #321902)
Cod sursa(job #321902)
#include <stdio.h>
#include <string.h>
FILE *in=fopen("next.in","r"),*out=fopen("next.out","w");
char v1[1000001];
unsigned long long n[1000001],n2[18],d,r;
void init()
{
unsigned long long i;
fscanf(in,"%s\n%lld",&v1,&d);
n[0]=strlen(v1);
for(i=1;i<=n[0];i++)
n[i]=int(v1[n[0]-i])-48;
}
void suma(unsigned long long A[], unsigned long long B[])
{ unsigned long long i,T=0;
if (B[0]>A[0])
{ for (i=A[0]+1;i<=B[0];) A[i++]=0;
A[0]=B[0];
}
else for (i=B[0]+1;i<=A[0];) B[i++]=0;
for (i=1;i<=A[0];i++)
{ A[i]+=B[i]+T;
T=A[i]/10;
A[i]%=10;
}
if (T) A[++A[0]]=T;
}
void scadere(unsigned long long A[], unsigned long long B[])
{ unsigned long long i;
int T=0;
for (i=B[0]+1;i<=A[0];) B[i++]=0;
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) A[i]+=10;
}
while (!A[A[0]]) A[0]--;
}
unsigned long rest(unsigned long long A[], unsigned long long B)
{
unsigned long long i,t=0;
for (i = A[0]; i > 0; i--)
t = (t*10 + A[i]) % B;
return t;
}
int main()
{
unsigned long long i;
init();
r=rest(n,d);
if(!r)
for(i=n[0];i;i--)
fprintf(out,"%ld",n[i]);
else
{
i=0;
while(d)
{
n2[++i]=d%10;
d/=10;
}
n2[0]=i;
suma(n,n2); //n=n+d
i=0;
while(r)
{
n2[++i]=r%10;
r/=10;
}
n2[0]=i;
scadere(n,n2);
for(i=n[0];i;i--)
fprintf(out,"%ld",n[i]);
}
fclose(out);
return 0;
}