Pagini recente » Cod sursa (job #2338153) | Cod sursa (job #1890224) | Cod sursa (job #879725) | Cod sursa (job #2691743) | Cod sursa (job #1628674)
#include <stdio.h>
#define MAXL 2001
typedef struct{
int v[MAXL];
int d;
}numar;
numar rez, aux1, aux2, n;
inline void copy(numar *a, numar b){
int i;
for(i = 0; i < b.d; i++)
a->v[i] = b.v[i];
a->d = b.d;
}
inline void prod(numar *a, numar b){
numar aux;
int i, j;
for(i = 0; i < a->d + b.d; i++)
aux.v[i] = 0;
for(i = 0; i < a->d; i++){
for(j = 0; j < b.d; j++){
aux.v[i + j] += a->v[i] * b.v[j];
}
}
i = 0;
int tr = 0;
while(i < a->d + b.d - 1 || tr > 0){
aux.v[i] += tr;
tr = aux.v[i] / 10;
aux.v[i] %= 10;
i++;
}
for(j = 0; j < i; j++)
a->v[j] = aux.v[j];
a->d = i;
}
inline void add(numar *a, numar b){
int i, tr;
for(i = 0; i < b.d; i++){
a->v[i] += b.v[i];
}
i = 0;
tr = 0;
while(i < a->d || i < b.d || tr > 0){
a->v[i] += tr;
tr = a->v[i] / 10;
a->v[i] %= 10;
i++;
}
a->d = i;
}
inline void scad(numar *a, int x){
int i = 0;
a->v[i] -= x % 10;
x /= 10;
while(a->v[i] < 0){
a->v[i] += 10;
a->v[i + 1]--;
i++;
a->v[i] -= x % 10;
x /= 10;
}
while(a->d > 0 && a->v[a->d - 1] == 0)
a->d--;
}
int main(){
FILE *in = fopen("sarpe.in", "r");
int i, aux;
char ch = fgetc(in);
while(ch >= '0' && ch <= '9'){
n.v[n.d] = ch - '0';
ch = fgetc(in);
n.d++;
}
fclose(in);
for(i = 0; i < n.d / 2; i++){
aux = n.v[i]; n.v[i] = n.v[n.d - i - 1]; n.v[n.d - i - 1] = aux;
}
copy(&aux1, n);
aux2.v[0] = 4;
aux2.d = 1;
prod(&aux1, aux2);
add(&rez, aux1);
copy(&aux1, n);
scad(&aux1, 1);
copy(&aux2, n);
scad(&aux2, 2);
prod(&aux1, aux2);
aux2.v[0] = 2;
aux2.d = 1;
prod(&aux1, aux2);
add(&rez, aux1);
FILE *out = fopen("sarpe.out", "w");
if(n.d == 1 && n.v[0] == 1)
fprintf(out, "2");
else
for(i = rez.d - 1; i >= 0; i--)
fprintf(out, "%d", rez.v[i]);
fclose(out);
return 0;
}