Pagini recente » Cod sursa (job #1795988) | Cod sursa (job #1092549) | Cod sursa (job #3172491) | Cod sursa (job #2778844) | Cod sursa (job #542682)
Cod sursa(job #542682)
#include <stdio.h>
#include <string.h>
#define NMAX 4000
int n, a[NMAX], c[NMAX];
char s[NMAX];
void inmultire(int a[])
{
int i, j, t;
for ( i = 1; i <= a[0]; i++)
{
for ( t = 0, j = 1; j <= a[0] || t; j++, t /= 10)
c[ i + j - 1] = ( t += c[i + j - 1] + a[i] * a[j]) % 10;
if ( i + j - 2 > c[0])
c[0] = i + j - 2;
}
}
void scade(int c[], int a[])
{
int i, t = 0;
for ( i = 1; i <= c[0]; i++)
c[i] += ( t = (c[i] -= a[i] + t) < 0) * 10;
for ( ; c[0] > 1 && c[c[0]] == 0; c[0]--);
}
void aduna(int c[], int x)
{
int i, t = 0;
c[1] += x;
t = c[1] / 10;
c[1] = c[1] % 10;
for ( i = 2; i <= c[0] || t; i++, t /= 10)
c[i] = ( t += c[i] ) % 10;
c[0] = i - 1;
}
void inmulti(int c[], int x)
{
int i, t = 0;
for (i = 1; i <= c[0] || t; i++, t /= 10)
c[i] = ( t += c[i] * x ) % 10;
c[0] = i - 1;
}
int main()
{
int i;
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
scanf("%s", s);
n = strlen(s);
for ( i = n - 1; i >= 0; i--)
a[++a[0]] = s[i] - '0';
if (a[0] == 1 && a[a[0]] == 1)
printf("2\n");
else
{
inmultire(a);
scade(c, a);
aduna(c, 2);
inmulti(c, 2);
for ( i = c[0]; i >= 1; i--)
printf("%d", c[i]);
printf("\n");
}
return 0;
}