Cod sursa(job #45224)

Utilizator znakeuJurba Andrei znakeu Data 1 aprilie 2007 11:28:31
Problema Next Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <stdio.h>
#include <string.h>
int A[1000005],B[1000005];

int mod(int b)  
{  
    int i, t = 0;  
    for (i = A[0]; i > 0; i--)  
        t = (t * 10 + A[i]) % b;  
    return t;  
}  

void add()  
{  
    int i, t = 0;  
    for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)  
		A[i] = (t += A[i] + B[i]) % 10;  
    A[0] = i - 1;  
}  

void invert (char B[],int x)
{
	int i;
	for (i=x-2; i>=0; i--)
		A[x-i-1]=B[i]-'0';	
	A[0]=x-1;
}

int main()
{

	int x,i;
	long long b=0,c; 
	char nrmare[1000005];
	FILE *in=fopen("next.in","r");
	fgets(nrmare,1005,in);
	x=strlen(nrmare);
	invert(nrmare,x);
	fgets(nrmare,1005,in);
	x=strlen(nrmare);
	fclose(in);
	if (nrmare[x-1]==10)
		x--;
	i=0;
	while (i<=x-1)
	{
		b=b*10+nrmare[i]-'0';
		i++;
	}
	c=mod(b);
	c=(b-c)%b;
	i=1;
	while (c)
	{
		B[i]=c%10;
		c/=10;
		i++;		
	}
	B[0]=i-1;
	add();
	FILE *out=fopen("next.out","w");
	for (i=A[0]; i>=1; i--)
		fprintf(out,"%d",A[i]);
	fprintf(out,"\n");
	fclose(out);
	return 0;
}