Cod sursa(job #322114)

Utilizator Abi79Iordache Albert Abi79 Data 8 iunie 2009 00:58:33
Problema Next Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <stdio.h>
#include <string.h>

FILE *f,*s;

char v1[1000003],c[1000003];
long long int m,r;
int i,j,vlen,clen;

long long int rest (char A[], int alen, long long int X)  
{ 
	long long int R=0;
    
	for (i=alen;i>0;i--)  
	R=(10*R+(A[i]-48))%X;  
	return R;  
}  

void suma(char x[], int xlen, char y[], int ylen)
{
	int T=0,aux;
	
	memset(y + ylen + 1, 0+48, xlen - ylen);
	ylen=xlen;

	for (i=1;i<=xlen;i++)
	{
		aux=x[i]-48+y[i]-48+T;
		T=aux/10;
		aux%=10;
		x[i]=aux+48;
	}
	
	if (T)
	{
		x[0]=x[0]+1+48;
		x[xlen]=T+48;
	}
}

int main()
{
	char aux;
	
	f=fopen("next.in","r");
	s=fopen("next.out","w");
	
	fscanf(f,"%s\n",&v1);
		memmove(v1+1,v1,1000001);
		v1[0]=48;
		vlen=strlen(v1)-1;

	j=vlen;
	
	for(i=1;i<j;i++)
	{
		aux=v1[i];
		v1[i]=v1[j];
		v1[j--]=aux;
	}
	
	printf("\n\n");
	
	fscanf(f,"%I64d",&m);
	
	r=rest(v1,vlen,m);
	
	m=m-r;
	
	if(r==0)
		for(i=vlen;i>0;i--)
			fprintf(s,"%c",v1[i]);
		
	else
	{
		clen=0;
		while(m)
		{
			clen++;
			c[clen]=m%10+48;
			m=m/10;
		}
		
		c[clen+1]='\0';
		
		suma(v1,vlen,c,clen);
		
		for(i=vlen;i>0;i--)
			fprintf(s,"%c",v1[i]);
	}
	
	fclose(s);
	
	return 0;
}