Pagini recente » Cod sursa (job #1282217) | Cod sursa (job #2719342) | Cod sursa (job #3227698) | Cod sursa (job #2681573) | Cod sursa (job #757627)
Cod sursa(job #757627)
#include <stdio.h>
#include <math.h>
#include <string.h>
#define maxn 1024 * 4
long i, len, v1[maxn], v2[maxn], cv1, cv2, t, o, n[maxn], max, u[maxn], sum[maxn];
char st[maxn];
void inmultire_cu_4() {
for( long i = 1; i <= o; ++i)
v1[i]*=4;
for( long i = 1; i <= o || (v1[i] > 0 ); ++i)
{
v1[i+1]+=v1[i]/10;
v1[i] %= 10;
}
}
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() {
n[1]--;
long k = 1;
while(n[k] < 0)
{
n[k] = 9;
n[++k]--;
}
if( k == o && n[k] == 0)
o--;
}
void adunare() {
long i = 0, aux = 0;
for (i = 1; i <= cv1 || i <= max || 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 = len-1; i >= 0 ; --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", sum[i]);
}
printf("\n");
return 0;
}