Pagini recente » Cod sursa (job #1624047) | Cod sursa (job #1291841) | Cod sursa (job #2503864) | Cod sursa (job #2048835) | Cod sursa (job #1200085)
#include <stdio.h>
#define MAXCIF 10000
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)){
v3[j + 1] += v3[j] / 10;
v1[j] = v3[j] % 10;
j++;
}
for( ; j < MAXCIF; j++){
v1[j] = v3[j];
}
for(i = 0; i < MAXCIF; i++){
if(v3[i] > 0 && i + 1 > *dr1) *dr1 = i + 1;
}
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;
}