Cod sursa(job #535965)

Utilizator nautilusCohal Alexandru nautilus Data 17 februarie 2011 22:41:21
Problema Next Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#define dmax 1000010
using namespace std;

int a[dmax],b[dmax];
long long d,rest;

void citire()
{
 int i;
 char s[dmax];
	
 ifstream fin("next.in");
 
 fin.get(s,dmax); fin.get();
 a[0] = strlen(s);
 for (i=0; i<a[0]; i++)
	 a[a[0] - i] = s[i] - '0';
 
 fin>>d;
 
 fin.close();
}


void impartire()
{
 int i;
	
 for (i=a[0]; i>=1; i--)
	 {
	  if (a[i] % d != 0)
		  if (i-1 != 0)
			  a[i-1] = (a[i] % d) * 10 + a[i-1]; else 
			  rest = a[i] % d;
	 
	  a[i] = a[i] % 10;
	 }
}


void aranjare()
{
 long long r = d - rest;
 
 while (r != 0)
	 {
	  b[0]++;
	  b[b[0]] = r % 10;
	  r = r / 10;
	 }
}


void adunare()
{
 int i,maxcif;
	
 if (rest != 0)
	 {
	  maxcif = max(a[0], b[0]);
	  
	  for (i=1; i<=maxcif; i++)
		  {
		   a[i] += b[i];
		   if (a[i] > 9)
			   {
			    a[i+1] += a[i] / 10;
			    a[i] = a[i] % 10;
			   }
		  }
	 
	  a[0] = maxcif;
	  if (a[a[0]+1] != 0)
		  a[0]++;
	 }
}


void afisare()
{
 int i;
	
 ofstream fout("next.out");
 
 for (i=a[0]; i>=1; i--)
	 fout<<a[i];
 
 fout.close();
}


int main()
{
	
 citire();
 impartire();
 aranjare();
 adunare();
 afisare();
 
 return 0;
}