Pagini recente » Cod sursa (job #497232) | Cod sursa (job #1665537) | Cod sursa (job #1835560) | Cod sursa (job #1318442) | Cod sursa (job #1200075)
#include <stdio.h>
#define MAXCIF 100000
void inmult(int *v1, int *dr1, int *v2, int *dr2){
int i, j, v3[ MAXCIF ];
for(i = 0; i < MAXCIF; i++) v3[i] = 0;
for(i = 0; i < *dr2; i++){
for(j = 0; j < *dr1; j++){
v3[j + i] += v1[j] * v2[i];
}
}
j = 0;
while(v3[j] > 9 || j < (*dr1)){
if(v3[j] > 9 && j + 2 > *dr1) *dr1 = j + 2;
v3[j + 1] += v3[j] / 10;
v1[j] = v3[j] % 10;
j++;
}
v1[j] = v3[j];
return ;
}
void fctrl(int n, int *v, int *dr){
int ci, i, v2[3], dr2;
for(i = 2; i <= n; i++){
ci = i;
dr2 = 0;
while(ci > 0){
v2[dr2] = ci % 10;
ci /= 10;
dr2++;
}
inmult(v, dr, v2, &dr2);
}
return ;
}
void expn2(int n, int *v, int *dr){
int v2[ MAXCIF ], dr2, cdr2;
v2[0] = 2;
dr2 = 1;
while(n > 0){
if(n & 1){
inmult(v, dr, v2, &dr2);
}
cdr2 = dr2;
inmult(v2, &dr2, v2, &cdr2);
n /= 2;
}
return ;
}
int main(){
FILE *in = fopen("patrate2.in", "r");
int n;
fscanf(in, "%d", &n);
fclose(in);
FILE *out = fopen("patrate2.out", "w");
int v[MAXCIF], dr = 1, i;
v[0] = 1;
fctrl(n, v, &dr);
expn2(n * n, v, &dr);
for(i = dr - 1; i >= 0; i--){
fprintf(out, "%d", v[i]);
}
fclose(out);
return 0;
}