Pagini recente » Borderou de evaluare (job #1515511) | Cod sursa (job #1876946) | Cod sursa (job #1083899) | Cod sursa (job #2119525) | Cod sursa (job #1829206)
#include<stdio.h>
#include<stdlib.h>
int DoiLaNPatrat[1000] = {1, 1};
int NFactorial[1000] = {1, 1};
//------------------------------------------------------
void ScalarMultiply(int A[], int x){
int i, t = 0;
for (i = 1; i <=A[0] || t; i++, t /= 10000){
A[i] = (t += A[i] * x) % 10000;
}
A[0] = i - 1;
}
//------------------------------------------------------
void HugeMultiply(int A[], int B[]) {
int i, j, t, C[1000];
memset(C, 0, sizeof(C));
for (i = 1; i <= A[0]; i++){
for (t=0, j=1; j <= B[0] || t; j++, t/=10000){
C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10000;
}
}
if(i + j - 2 > C[0]){
C[0] = i + j - 2;
}
memcpy(A, C, sizeof(C));
}
//------------------------------------------------------
int main(){
FILE *file1, *file2;
int N, i;
file1 = fopen("patrate2.in", "r");
file2 = fopen("patrate2.out", "w");
fscanf(file1, "%d", &N);
for(i=2; i<=N; i++){
ScalarMultiply(NFactorial, i);
}
for(i=1; i<=N*N; i++){
ScalarMultiply(DoiLaNPatrat, 2);
}
HugeMultiply(NFactorial, DoiLaNPatrat);
for(i=NFactorial[0]; i>0; i--){
if(i!=NFactorial[0]){
if(!(NFactorial[i]/10)){
fprintf(file2, "000");
}else if(!(NFactorial[i]/100)){
fprintf(file2, "00");
}else if(!(NFactorial[i]/1000)){
fprintf(file2, "0");
}
}
fprintf(file2, "%d", NFactorial[i]);
}
return 0;
}