Cod sursa(job #759994)

Utilizator titusuTitus C titusu Data 19 iunie 2012 22:38:56
Problema Next Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <cassert>
#include <fstream>
#include <cstring>
using namespace std;
char v[1000005];
int a[1000005],n;

int main(){
  long long D;
  ifstream fin("next.in");
  ofstream fout("next.out");
  fin.getline(v , sizeof( v ) );
  fin >> D;
  assert(D >= 2LL);
  n = 0;
  for(int i=strlen(v)-1 ; i>=0 ; --i){
	assert(v[i]>='0' && v[i] <= '9');
    a[++n] = v[i] - '0';
  }
  a[0] = n;
  while( a[a[0]] == 0 && a[0] > 1 )
	a[0] -- ;
  long long t = 0;
  for(int i=a[0] ; i ; --i)
    t = (10 * t + a[i]) % D;
  assert( t >= 0 );
  D = (D - t) % D;
  t = 0 ;
  int i = 0;
  while ( D ){
    if( i+1 > a[0] )
      a[ ++ a[0] ] = 0;
    i ++;
    int tmp = a[i] + D % 10 + t;
    a[i] = tmp % 10;
    t = tmp / 10;
    D /= 10;
  }
  while( t ){
    if( i + 1 > a[0] )
      a[ ++ a[0] ] = 0;
    a[++i] += t % 10, t /= 10;
  }
  while( a[a[0]] == 0 && a[0] > 1 )
	a[0] --;

  for(int i=a[0];i;--i)
    fout<<a[i];
  fout<<endl;
  return 0;
}