Pagini recente » Monitorul de evaluare | Cod sursa (job #2399574) | Cod sursa (job #2043290) | Cod sursa (job #3253585) | Cod sursa (job #472832)
Cod sursa(job #472832)
#include<stdio.h>
#include<string.h>
using namespace std;
#define dim 1000005
char v[dim];
long long D;
int n,i,R,a,b,in,DD,nr,N,j;
short int A[dim],B[dim],ok,k;
int main()
{
FILE *f=fopen("next.in","r"), *g=fopen("next.out","w");
fscanf(f,"%s",v);
fscanf(f,"%lld",&D);
if(D==1)
{fprintf(g,"%s\n",v);fclose(f);
fclose(g);
return 0;}
DD=D;
while(DD!=0)
{
nr++; DD/=10;
}
n=strlen(v);
for(i=0;i<n;i++)
A[i+1]=v[i]-48;
memcpy(B,A,sizeof(B));
ok=1;
if(n<nr)
ok=0;
in=1; N=n;
while(ok)
{
a=A[in];
for(i=in+1;i<=in+nr-1;i++)
{a*=10; a+=A[i];}
k=0;
if(a<D)
{a*=10; a+=A[in+nr]; k=1;}
b=a;
a/=D;
a*=D;
b-=a;
for(i=in+nr-1+k;i>=in;i--)
{
A[i]=b%10;
b/=10;
}
for(i=1;i<=N;i++)
if(A[i]!=0)
{
in=i; n=N-i+1; break;
}
if(n<nr)
ok=0;
else if(n==nr)
{ b=0;
for(i=1;i<=N;i++)
if(A[i]!=0)
{b=A[i]; j=i; break;}
for(i=j+1;i<=N;i++)
if(A[i]!=0)
{
b*=10; b+=A[i];
}
if(b<D)
ok=0;
}
}
//restul
R=A[in];
for(i=in+1;i<=N;i++)
{R*=10; R+=A[i];}
DD=(D-R)%D;
i=0;
while(DD!=0)
{
B[N-i]+=DD%10;
if(B[N-i]>9)
{B[N-i]%=10;
B[N-i-1]++;}
DD/=10;
i++;
}
for(i=1;i<=N;i++)
fprintf(g,"%d",B[i]);
fprintf(g,"\n");
fclose(f);
fclose(g);
return 0;
}