Cod sursa(job #1309152)

Utilizator BlackBird_v.1.0Stephen Berg BlackBird_v.1.0 Data 5 ianuarie 2015 14:01:43
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;
long long B;
int A[1000013],F[10000013],i;
string s;

void add(int A[],int B[])
 {
  int i,rest=0;
    for (i=1;i<=A[0] || i<=B[0] || rest;++i)
      {
       rest+=A[i]+B[i];
       A[i]=rest%10;
       rest/=10;
	  }
  A[0]=i-1;
 }
 
void decrease(int A[], int B[])
 {
  int i,rest(0);
    for (i=1;i<=A[0] || rest;++i)
     {
      A[i]-=B[i]+rest;
      A[i]+=(rest=A[i]<0)*10;
	 }
 while(A[0]>0 && !A[A[0]]) --A[0];
 }
 
long long mod(int A[], long long B)
 {
  long long i,rest(0);
   for (i=A[0];i>=1;--i)
     rest=(rest*10+A[i])%B;
  return rest;
 }

void reverse(int A[])
 {
 for (int i=1;i<=A[0]/2;++i)
   swap(A[i],A[A[0]-i+1]);
 }

void assign(string s, int A[])
{
 for (int i=0;i<s.size();++i) A[++A[0]]=s[i]-'0';
}

int main(void)
{
 ifstream in("next.in");
 ofstream out("next.out");
 getline(in,s); assign(s,A); reverse(A);
 in>>B;
 long long modulo=(B-mod(A,B))%B;
 while(modulo)   
    {
     F[++F[0]]=modulo%10;
     modulo/=10;
	}
 reverse(F);
 add(A,F);
 for (i=A[0];i>=1;--i) out<<A[i];	
 return 0;
}