Cod sursa(job #831641)

Utilizator jolgauSecret Fidel jolgau Data 8 decembrie 2012 21:24:18
Problema Next Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;

ifstream f("next.in");
ofstream g("next.out");

typedef int Huge[1000006];
typedef int Huge1[50];
Huge A;
Huge1 B;

unsigned long long Mod(Huge A,unsigned long long x)
{
int i;
unsigned long long R=0;
for(i=A[0]; i>=1; i--)
    R = (10*R + A[i])%x;
return R;
}

void Sum(Huge A,Huge1 B)
{
int i,T=0;
if(A[0] > B[0])
   {
    for(i=B[0]+1; i<=A[0]; i++) B[i] = 0;
    B[0] = A[0];
   }
else for(i=A[0]+1; i<=B[0]; i++) A[i] = 0;

for(i=1; i<=B[0]; i++)
    {
     A[i] += (B[i]+T);
     T = A[i]/10;
     A[i]%=10;
    }
if(T) A[++A[0]] = T;
}

int main()
{
char nn[100005];
int i;
unsigned long long d,r;

f>>nn;
f>>d;

A[0] = strlen(nn);
for(i=1; i<=A[0]; i++)
    A[i] = (nn[A[0]-i] - '0');

r = Mod(A,d);
if(r == 0)
   {
    for(i=A[0]; i>=1; i--)
       g<<A[i];
   }
else
   {
    d-=r;
    B[0] = 0;
    while(d != 0)
         {
          B[++B[0]] = d%10;
          d/=10;
         }
    Sum(A,B);

    for(i=A[0]; i>=1; i--)
       g<<A[i];
   }

f.close();
g.close();
return 0;
}