Cod sursa(job #63943)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 31 mai 2007 19:16:39
Problema Next Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<stdio.h>
#include<string.h>

long long k;

int *a=new int[1000100];
int *b=new int[100];


void citire()
 { char sir[1000100];
   freopen("next.in","r",stdin);

   long long n, i;
   scanf("%s %lld",&sir,&k);
   n = strlen(sir);
   a[0] = n;
   for (i = 0; i < n; i++)
    a[n-i] = sir[i] - '0';   
}

void div(int A[], int B)
{
  long long i, t = 0;
  for (i = A[0]; i > 0; i--, t %= B)
     A[i] = (t = t * 10 + A[i]) / B;
  for (; A[0] > 1 && !A[A[0]]; A[0]--);
}

void adunare(int a[],int b[])
 { int s[1000000], ct ,i;
   ct = 0;
   memset ( s, 0, sizeof(s));
   if ( a[0] > b[0] ) s[0] = a[0];
      else s[0] = b[0];

   for (i = 1; i <= s[0]; i++)
      { s[i] = a[i] + b[i] + ct;
	ct = s[i] / 10;
	s[i] = s[i] % 10;
      }

   if (ct) { s[0]++;
	     s[s[0]] = ct;
	   }
  for (i=0;i<=s[0]; i++) a[i]=s[i];


}

void inmultire(int A[], long long B)
{
      int i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
	      A[i] = (t += A[i] * B) % 10;
      A[0] = i - 1;
}


void afis()
{
  freopen("next.out","w",stdout);
  for (long long i=a[0]; i>=1;i--)
     printf("%d",a[i]);
}



int main()
{
  citire();
  div(a,k);
  b[0]=1; b[1]=1;
  adunare(a,b);
  inmultire(a,k);
  afis();


  return 0;
}