Cod sursa(job #206986)

Utilizator MciprianMMciprianM MciprianM Data 11 septembrie 2008 10:37:28
Problema Patrate2 Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
using namespace std;
#define MAXL (1<<12)
int nfact[MAXL];
int lanp2[MAXL];
int rezultat[(MAXL<<1)];
void inmult(int fa){
  int i,t;
  for(i=1,t=0;i<=nfact[0]||t;i++,t/=10)
    nfact[i]=(t+=nfact[i]*fa)%10;
  nfact[0]=i-1;
}
void fact(int n){
   int i;
   nfact[0]=1;nfact[1]=1;
   for(i=2;i<=n;i++)
     inmult(i);
}
void inm(){
  int i, t;
  for(i=1;i<=lanp2[0]||t;i++,t/=10)
    lanp2[i]=(t+=lanp2[i]*2)%10;
  lanp2[0]=i-1;
}
void ridic(int p){
  int i;
  lanp2[0]=1;lanp2[1]=2;
  for(i=1;i<p;i++)
    inm();
}
void inmultiremare(){
  int i, j,t;
  for(i=1;i<=nfact[0];i++){
    for(j=1,t=0;j<=lanp2[0]||t;j++,t/=10){
      rezultat[i-1+j]=(t+=nfact[i]*lanp2[j])%10;
    }
  }
  rezultat[0]=i+j-3;
}
int main(){
  int n;
  ifstream f("patrate2.in");
  f>>n;
  f.close();
  fact(n);
  ridic(n*n);
  inmultiremare();
  ofstream g("patrate2.out");
  int i;
  for(i=rezultat[0];i>0;i--)
    g<<rezultat[i];
  g<<'\n';
  g.close();
  return 0;
}