Cod sursa(job #524142)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 20 ianuarie 2011 11:29:36
Problema Next Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<stdio.h>
#include<string.h>
const char in[]="next.in", out[]="next.out";

const int Nmax = 1000005 ; 
typedef int huge[Nmax] ;
huge a;
int b[50];
long long d, r ;
char s[Nmax];

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

void aduna(huge &A, int B[])
{
      long long i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
              A[i] = (t += A[i] + (i > B[0] ? 0 :B[i])) % 10;
      A[0] = i - 1;
}


int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		fgets(s, Nmax, stdin);
		for(int i = strlen(s); i >= 0 ; --i)
			if(s[i] >='0' && s[i] <= '9')
				a[ ++a[ 0 ] ] = s[i] - '0';
		scanf("%lld", &d);
		r = mod(a, d);
		d = ( d - r ) % d;
		while(d)b[++b[0]] = d % 10, d /= 10;
		aduna(a, b);
		for( int j = a[0]; j >= 1 ; --j)
		printf("%d", a[j]);
		return 0;
}