Pagini recente » Cod sursa (job #2533412) | Cod sursa (job #2281333) | Cod sursa (job #2968786) | Cod sursa (job #1726184) | Cod sursa (job #68968)
Cod sursa(job #68968)
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <ctype.h>
#define NMAX 10000//0
#include <string.h>
int n[NMAX+5];
int aux[NMAX+5];
void read()
{
char aux[NMAX+5];
int i;
scanf("%s", aux+1);
//printf("%s", aux+1);
n[0] = strlen(aux+1);
for(i = 1; i <= n[0]; ++i)
n[i] = aux[n[0]-i+1]-'0';
}
void mulmic(int n[NMAX+5], int b)
{
int i, t;
for(t = 0, i = 1; i <= n[0] || t; ++i, t /= 10)
n[i] = (t += n[i] * b) % 10;
n[0] = i-1;
}
void scade(int a[NMAX+5], int b)
{
int i, t;
a[1] -= b;
if(a[1] < 0)
{
a[1] += 10;
for(i = 2; ; ++i)
if(!a[i])
a[i] = 9;
else
{
--a[i];
return ;
}
}
}
void mulmare(int a[NMAX+5], int b[NMAX+5])
{
int c[NMAX+5];
int i, j, t;
memset(c, 0, sizeof(c));
for(i = 1; i <= a[0]; ++i)
{
for(t = 0, j = 1; j <= b[0] || t; ++j, t /= 10)
c[i+j-1] = (t += c[i+j-1] + a[i]*b[j]) % 10;
if(c[0] < i+j-2)
c[0] = i+j-2;
}
memcpy(a, c, sizeof(c));
}
void print(int a[NMAX+5])
{
int i;
//for(i = 1; i <= a[0]; ++i)
for(i = a[0]; i; --i)
printf("%d", a[i]);
printf("\n");
}
void aduna(int a[NMAX+5], int b[NMAX+5])
{
int i, t;
for(t = 0, i = 1; i <= a[0] || i <= b[0] || t; ++i, t /= 10)
a[i] = (t += a[i] + b[i]) % 10;
a[0] = i-1;
for(;a[0] > 0 && !a[a[0]]; --a[0]);
}
int main()
{
freopen("sarpe.in", "r", stdin);
freopen("sarpe.out", "w", stdout);
read();
if(n[0] == n[1] && n[1] == 1)
{
printf("%d\n", 2);
return 0;
}
int n1[NMAX+5], n2[NMAX+5];
memcpy(n1, n, sizeof(n));
memcpy(n2, n, sizeof(n));
scade(n1, 2);
scade(n2, 1);
mulmic(n, 4);
mulmic(n2, 2);
mulmare(n1, n2);
aduna(n, n1);
print(n);
return 0;
}