Pagini recente » Cod sursa (job #1173060) | Cod sursa (job #1446602) | Victor Birna | Cod sursa (job #1137168) | Cod sursa (job #1410005)
#include<cstdio>
using namespace std;
int N;
struct str
{
int v[45];
}dp[3];
void finish (str &x, int t)
{
while (t)
x.v[++x.v[0]] = t % 100000, t /= 100000;
}
str get (int x)
{
str ans;
ans.v[0] = 0;
while (x)
ans.v[++ans.v[0]] = x % 100000, x /= 100000;
return ans;
}
str suma (str a, str b)
{
str ras;
if (a.v[0] > b.v[0]) ras.v[0] = a.v[0];
else ras.v[0] = b.v[0];
int t = 0;
for (int i=1; i<=ras.v[0]; i++)
{
int c1 = 0, c2 = 0;
if (i <= a.v[0]) c1 = a.v[i];
if (i <= b.v[0]) c2 = b.v[i];
ras.v[i] = (c1 + c2 + t) % 100000;
t = (c1 + c2 + t) / 100000;
}
finish (ras, t);
return ras;
}
void afis (str x)
{
printf ("%d", x.v[x.v[0]]);
for (int i=x.v[0] - 1; i>=1; i--)
{
if (x.v[i] < 10000) printf ("0");
if (x.v[i] < 1000) printf ("0");
if (x.v[i] < 100) printf ("0");
if (x.v[i] < 10) printf ("0");
printf ("%d", x.v[i]);
}
printf ("\n");
}
int main ()
{
freopen ("nunta.in", "r", stdin);
freopen ("nunta.out", "w", stdout);
scanf ("%d", &N);
dp[0] = dp[1] = get (1);
for (int i=2; i<=N; i++)
dp[i % 3] = suma (dp[(i-1) % 3], dp[(i-2) % 3]);
afis (dp[N % 3]);
return 0;
}