Cod sursa(job #37718)

Utilizator kaesarioDumi Loghin kaesario Data 25 martie 2007 12:11:10
Problema Next Scor 0
Compilator c Status done
Runda preONI 2007, Runda 4, Clasa a 9-a si gimnaziu Marime 1.88 kb
#include <stdio.h>
#define MAX 100000

void prod(char *a, int na, char *b, int nb, char *c, int *nc)
{
     int t, r, i, j, k;
     t=0; r=0;
     for (i=0; i<2*na+nb; i++) c[i]=0;
     for (i=0; i<na; i++)
     {
      t=0;
      for (j=0; j<nb; j++)
       {
          r=t+a[i]*b[j]+c[i+j];
          c[i+j]=r%10;
          t=r/10;
       }
       k=i+j;
       while (t)
       {
          c[k]=t%10;
          t/=10;
          k++;   
       }
      }
     *nc=k;
}
int adun(char *x, int n, char b)
{
    int t, i;
    t=x[0]+b;
    x[0]=t%10;
    t/=10;
    i=1;
    while (t)
    {
        t+=x[i];
        x[i]=t%10;
        t/=10;  
        i++;
    }
    if (i>n) return i; else return n;
}
int comp(char *x, int n, char *y, int m)
{
    int i;
    if (n>m) return 1;
    if (n<m) return -1;
    if (n==m)
     for (i=n-1; i>=0 && x[i]==y[i]; i--);
    if (i<0) return 0;
     else
      if (x[i]<y[i]) return -1; else return 1;
}

int main()
{
    FILE *f;
    char cx, a[MAX], b[20], c[MAX], x[MAX]={0};
    int n, m, l, k, i;
    f=fopen("next.in", "rt");
    n=0;
    fscanf(f,"%c",&cx); 
    while (cx!='\n')
    {
          a[n]=cx-'0';
          n++;
          fscanf(f,"%c", &cx);
    }
    for (i=0; i<n/2; i++) 
    {
        cx=a[i];
        a[i]=a[n-i-1];
        a[n-i-1]=cx;
    }
    m=0;
    fscanf(f,"%c",&cx); 
    while (cx!='\n')
    {
          b[m]=cx-'0';
          m++;
          fscanf(f,"%c", &cx);
    }
    for (i=0; i<m/2; i++) 
    {
        cx=b[i];
        b[i]=b[m-i-1];
        b[m-i-1]=cx;
    }
    fclose(f);
    /*
    */
    l=0;
    do
    {
      l=adun(x, l, 1);
      prod(b, m, x, l, c, &k);
      
    }while (comp(c, k, a, n)<0);
    f=fopen("next.out","wt");
    for (i=k-1; i>=0; i--) fprintf(f,"%i", c[i]);
     fprintf(f, "\n");
    fclose(f);
    return 0;
}