Cod sursa(job #47894)

Utilizator alecmanAchim Ioan Alexandru alecman Data 4 aprilie 2007 10:45:39
Problema Patrate2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
/*
 *
 *
  info-arena 2.0 - Arhiva - Patrate2
 *
 *
 */

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>

#define INPUT "patrate2.in"
#define OUTPUT "patrate2.out"

FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");

int n;
int a[10000],b;

void inmult(int x);
void inmult2(int x);
void produs();

int main()
{
  memset(a,0,sizeof(a));
  a[0]=1;
  long p=1;
  a[1]=1;
  fscanf(fin, "%d", &n);
  int h,l=0,k=1;
  h=n*n;
  for(int i=1;i<=h/2;++i)
  {
    if(p<10000000)
      p*=4;
    else
    {
      if(!l)
      {
        while(p!=0)
        {
          a[k]=p%10;
          p/=10;
          ++k;
          l=1;
        }
        a[0]=k-1;
      }
      inmult(4);
    }
  }
  if(!l)
  {
    while(p!=0)
    {
      a[k]=p%10;
      p/=10;
      ++k;
    }
    a[0]=k-1;
  }
  if(h%2!=0)
    inmult(2);
  for(int i=1;i<=n;++i)
    inmult(i);
  for(int i=a[0];i>=1;--i)
    fprintf(fout, "%d", a[i]);
  fclose(fin);
  fclose(fout);
  return 0;
}

void inmult(int x)
{
  int rest=0,temp=0,i;
  for(i=1;i<=a[0];++i)
  {
    temp=a[i]*x+rest;
    a[i]=temp%10;
    rest=temp/10;
  }
  while(rest)
  {
    a[i]=rest%10;
    rest/=10;
    ++i;
  }
  a[0]=i-1;
}