Pagini recente » Cod sursa (job #556748) | Cod sursa (job #2153903) | Cod sursa (job #1431670) | Cod sursa (job #3242301) | Cod sursa (job #196088)
Cod sursa(job #196088)
#include <stdio.h>
#include <math.h>
#include <string.h>
long i, len, v1[1024], v2[1024], cv1, cv2, t, o, n[1024], max, u[1024], sum[1024];
char st[1024];
void inmultire_cu_4() {
long i = 0;
long aux = v1[1] * 4;
v1[1] = v1[1] * 4;
for (i = 1; i <= cv1 || t != 0; ++i) {
aux = v1[i] + t;
v1[i] = aux % 10;
t = aux / 10;
}
cv1 = i - 1;
}
void inmultire_cu_n_1_si_n_2() {
long i = 0, j = 0;
for (i = 1; i <= cv1; ++i) {
for (j = 1; j <= o; ++j) {
u[i + j - 1] += v2[i] * n[j];
}
}
for( i = 1; i <= cv1 + o - 1 || (u[i] > 0); ++i) {
u[i + 1] += u[i] / 10;
u[i] %= 10;
v2[i] = u[i];
u[i] = 0;
}
max = i - 1;
}
void scadere() {
long p = 0;
n[o] -= 1;
if (n[o] < 0) {
p = o - 1;
while (n[p] == 0) {
--p;
}
if (p == 1) {
n[1] = 9;
} else {
--n[p];
}
if (p == 1) {
--o;
}
for (long i = p + 1; i <= o; ++i) {
n[i] = 9;
}
}
}
void adunare() {
long i = 0, aux = 0;
for (i = 1; i <= cv1 || i <= cv2 || t != 0; ++i) {
aux = v1[i] + v2[i] + t;
sum[i] = aux % 10;
t = aux / 10;
}
cv1 = i - 1;
}
int main() {
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
scanf("%s", st);
len = strlen(st);
for (i = 0; i < len; ++i) {
n[++o] = (long)(st[i] - '0');
}
if (n[1] == 1 && o == 1) {
printf("2\n");
return 0;
}
for (i = 1; i <= o; ++i) {
v1[i] = n[i];
}
cv1 = o;
inmultire_cu_4();
v2[1] = 2;
cv2 = 1;
scadere();
inmultire_cu_n_1_si_n_2();
scadere();
inmultire_cu_n_1_si_n_2();
adunare();
/* for (i = cv1; i >= 1; --i) {
printf("%ld ", v1[i]);
}
printf("\n");
for (i = max; i >= 1; --i) {
printf("%ld ", v2[i]);
}*/
for (i = cv1; i >= 1; --i) {
printf("%ld", sum[i]);
}
printf("\n");
return 0;
}