Cod sursa(job #116421)

Utilizator marinMari n marin Data 18 decembrie 2007 16:27:42
Problema Nunta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <stdio.h>

int f1[1000], f2[1000], f3[1000];


int getCifra(int *a, int i){
  if (i>a[0])
    return 0;
  else
    return a[i];
}

void suma(int *a, int *b, int *c) {
  int t = 0,max;
  max = a[0];
  if (max<b[0]) max=b[0];
  for (int i=1;i<=max;i++) {
    int aux = getCifra(a,i)+getCifra(b,i)+t;
    c[i]=aux%10;
    t=aux/10;
  }
  if (t==1) {
    c[0]=max+1;
    c[max+1]=1;
  } else {
    c[0]=max;
  }
}


void atrib(int *a,int *b){
  for (int i=0;i<=b[0];i++) {
    a[i]=b[i];
  }
}


int main(){
  int n,i;
  FILE *f = fopen("nunta.in","r");
  fscanf(f,"%d",&n);
  fclose(f);
  FILE *g = fopen("nunta.out","w");
  if (n<2) {
    fprintf(g,"%d",1);
  } else {
//    long long f1=1,f2=1,f3;
    f1[0]=1;f1[1]=1;
    f2[0]=1;f2[1]=1;
    for (i=1;i<=n-1;i++) {
/*      f3 = f1+f2;
      f1=f2;
      f2=f3;*/
      suma(f1,f2,f3);
      atrib(f1,f2);
      atrib(f2,f3);
/*    long long f1=1,f2=1,f3;
    for (i=1;i<=n-1;i++) {
      f3 = f1+f2;
      f1=f2;
      f2=f3;*/

    }
//    fprintf(g,"%lld",f3);
    for (i=f3[0];i>=1;i--){
      fprintf(g,"%d",f3[i]);
    }
  }

  fclose(g);
  return 0;
}