Cod sursa(job #1001814)

Utilizator Gusti666Lucaciu Catalin Gusti666 Data 26 septembrie 2013 10:50:07
Problema Next Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#define LG_MAX 1000000 + 1
using namespace std;
ifstream f("next.in");
ofstream g("next.out");
int suma1[LG_MAX],modul[LG_MAX],rezultat[LG_MAX],n[LG_MAX],x[LG_MAX];



  typedef int BigNumber[LG_MAX];

  void citire(BigNumber x){
  int i;
  char s[LG_MAX];
  f>>s;
  x[0]=strlen(s);
  for(i = x[0]-1; i >= 0; i--) x[x[0]-i] = s[i]-'0';
     for(i = x[0]+1; i < LG_MAX; i++) x[i] = 0;
  }
  void afisare(BigNumber x)
{
     for(int i = x[0]; i >= 1; i--)
        g<<(x[i]);

}
void suma(BigNumber a,BigNumber b,BigNumber s)
{
    int i,cifra,t = 0,max;

    //completam numarul cel mai mic cu zeroouri nesemnificative
    if(a[0] < b[0]) { max = b[0]; for(i = a[0]+1; i <= b[0]; i++) a[i] = 0; }
    else            { max = a[0]; for(i = b[0]+1; i <= a[0]; i++) b[i] = 0; }

    for(i = 1; i <= max; i++)
    {
      cifra = a[i] + b[i] + t; //calculam noua cifra
      s[i] = cifra % 10;
      t = cifra/10;            //calculam cifra de transport
    }
    if(t) s[i] = t; else i--;
    s[0] = i;
}
void diferenta(BigNumber a,BigNumber b,BigNumber d)
{
     int i,t = 0;
     if(a[0] < b[0])
     {
         diferenta(a,b,d);
     }
     else
     {
       for(i = 1; i <= a[0]; i++)
       {
           d[i] = a[i]-b[i]+t;                //diferenta
           if(d[i] < 0) d[i]+= 10,t = -1;  //calculam cifra de transport
           else t = 0;
        }
        i--;
        while(i && !d[i]) i--;
        d[0] = i;
     }
}
long long modulo( BigInteger A, long long B )
{
    long long i, T = 0;

    for ( i = A[0]; i; --i )
            T = ( T * 10 + A[i] ) % B;

    return T;
}





int main()
{citire(n);
citire(x);
//g<<(n+x)-(n+x)%x;
suma(n,x,suma1);
afisare(suma1);





    return 0;
}