Cod sursa(job #322048)

Utilizator Abi79Iordache Albert Abi79 Data 7 iunie 2009 23:51:21
Problema Next Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <stdio.h>
#include <string.h>

FILE *f,*s;

char v1[1000002],c[1000002];
long long int m,r;
int i,j;

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

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

	for (i=1;i<=x[0]-48;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[x[0]-48]=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]=strlen(v1)-1+48;

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