Cod sursa(job #472952)

Utilizator bugyBogdan Vlad bugy Data 27 iulie 2010 11:44:01
Problema Next Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<stdio.h>
#include<string.h>
using namespace std;
#define dim 1000005 

char v[dim];
long long D,DD,a;
int n,nr,NR,i,R,in,N;
short int A[dim],B[dim],ok;
int main()
{
	FILE *f=fopen("next.in","r"), *g=fopen("next.out","w");

fscanf(f,"%s",v);
fscanf(f,"%lld",&D);
	
DD=D;
while(DD!=0)
{
nr++; DD/=10;
}

n=strlen(v);
N=n;
for(i=0;i<n;i++)
	A[i+1]=v[i]-48;

memcpy(B,A,sizeof(B));

ok=1;	if(n<nr)	ok=0;
if(ok==0)
{	R=A[1];
	for(i=2;i<=N;i++)
	{R*=10; R+=A[i];}
}
else
{in=1;
	while(in<=N)
{
	a+=A[in];
	if(a>D)
		a=a-D*(a/D);
		
	in++;
	a*=10;
}
R=a/10;
}

R=(D-R)%D;
NR=N;
while(R!=0)
{
	B[NR]+=R%10;
	R/=10;
	if(B[NR]>9)
	{
		B[NR-1]+=B[NR]/10;
		B[NR]%=10;
		
	}
		
	NR--;

}

if(B[0]!=0)
	fprintf(g,"%hd",B[0]);
for(i=1;i<=N;i++)
	fprintf(g,"%hd",B[i]);
fprintf(g,"\n");

fclose(f);
fclose(g);
return 0;
}