Pagini recente » Cod sursa (job #2052606) | Cod sursa (job #2740011) | Cod sursa (job #3130024) | Cod sursa (job #2331833) | Cod sursa (job #37682)
Cod sursa(job #37682)
#include<stdio.h>
#include<string.h>
int a[1000000],b[1000000];
long dc;
long r;
int scadere(long d,long nc)
{
long i;
int ext=0,f=0;
long t=d;
for(i=nc;i>=1 && (d || f);i--)
{
if(a[i]-d%10-f<0)
{
a[i]=10+a[i]-d%10-f;
f=1;
}
else
{
a[i]=a[i]-f-d%10;
f=0;
}
if(d) dc++;
d=d/10;
}
if(f || (nc==dc && d)) ext=1;
d=t;
if(ext==1)
return 1;
else
return 2;
}
int rest(long nc,long d) {
long i;
long x=0;
for(i=1;i<=dc;i++)
x=x*10+a[i];
r=x%d;
if(dc<nc)
{
i=dc;
while(i<nc){
i++;
x=r*10+a[i];
r=x%d;
}
}
if(r!=0)
{
return 1;
}
else return 0;
}
void adunare(long d,long nc)
{
int t;
long i;
t=0;
for(i=nc;i>=1 && (d || t);i--)
{
t+=d%10+b[i];
b[i]=t%10;
t/=10;
d/=10;
}
}
int main()
{
long nc,i=0,ok=1;
long d;
char c;
FILE *fin,*fout;
fin=fopen("next.in","r");
fout=fopen("next.out","w");
while(ok)
{
fscanf(fin,"%c",&c);
if(c=='\n') ok=0;
else
{i++; a[i]=c-'0';}
}
fscanf(fin,"%ld",&d);
nc=i;
memcpy(b,a,sizeof(a));
int ret=scadere(d,nc);
switch(ret)
{
case 1:
fprintf(fout,"%ld",d);
break;
case 2:
ret=rest(nc,d);
if(ret==1){
adunare(d-r,nc);}
for(i=1;i<=nc;i++)
fprintf(fout,"%d",b[i]);
break;
}
fclose(fin);
fclose(fout);
return 0;
}