Pagini recente » Cod sursa (job #3218065) | Cod sursa (job #2635212) | Cod sursa (job #2372780) | Cod sursa (job #2509361) | Cod sursa (job #114406)
Cod sursa(job #114406)
#include <stdio.h>
#include <string.h>
#define lm 5000
#define baza 10
int a[lm], temp[lm], sol[lm];
void sum(int a[lm], int b[lm])
{
int i, t = 0;
for (i = 1; i <= a[0] || i <= b[0] || t; ++i, t /= baza)
a[i] = (t += a[i] + b[i]) % baza;
a[0] = i - 1;
}
void prod(int a[lm], int b)
{
int i, t = 0;
for (i = 1; i <= a[0] || t; ++i, t /= baza)
a[i] = (t += a[i] * b) % baza;
a[0] = i - 1;
}
void prod2(int a[lm], int b[lm])
{
int i, j, t, c[lm];
memset(c, 0, sizeof(c));
for (i = 1; i <= a[0]; ++i) {
for (t = 0, j = 1; j <= b[0] || t; ++j, t /= baza)
c[i + j - 1] = (t += c[i + j - 1] + a[i] * b[j]) % baza;
if (i + j - 2 > c[0])
c[0] = i + j - 2;
}
memcpy(a, c, sizeof(c));
}
void dec(int a[lm])
{
int i;
for (--a[1], i = 1; a[i] < 0; ++i) {
a[i] = 9;
--a[i + 1];
}
for (; a[0] > 1 && !a[a[0]]; --a[0]);
}
int main()
{
char ch;
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
while (!feof(stdin)) {
scanf(" %c ", &ch);
if (ch >= '0' && ch <= '9')
a[++a[0]] = ch - '0';
for (int i = 1; 2 * i <= a[0]; ++i) {
int aux;
aux = a[i];
a[i] = a[a[0] - i + 1];
a[a[0] - i + 1] = aux;
}
}
sum(sol, a);
prod(sol, 4);
dec(a);
sum(temp, a);
dec(a);
prod2(temp, a);
prod(temp, 2);
sum(sol, temp);
for (int i = sol[0]; i > 0; --i)
printf("%d", sol[i]);
printf("\n");
return 0;
}