Pagini recente » Cod sursa (job #372095) | Cod sursa (job #2536683) | Cod sursa (job #378516) | Cod sursa (job #608211) | Cod sursa (job #935230)
Cod sursa(job #935230)
#include <string.h>
#include <assert.h>
#define maxSize 300
#ifndef BIGNUMBER_H
#define BIGNUMBER_H
#include <cstdio>
using namespace std;
class BigNumber
{
public:
BigNumber();
BigNumber(int, int);
const BigNumber& operator=(const BigNumber& other);
const BigNumber& operator+=(const BigNumber& other);
void write_Data()
{
freopen("nunta.out", "w", stdout);
for(int i = this->a[0]; i; -- i) printf("%d", this->a[i]);
}
protected:
private:
int *a;
};
#endif
BigNumber :: BigNumber()
{
a = new int[maxSize];
for(int i = 0; i < maxSize; ++i) a[i] = 0;
}
BigNumber :: BigNumber(int x, int y)
{
a = new int[maxSize];
a[0] = x, a[1] = y;
}
const BigNumber& BigNumber :: operator=(const BigNumber& other)
{
assert(a);
a = new int[maxSize];
for(int i = 0; i <= other.a[0]; ++i) a[i] = other.a[i];
return *this;
}
const BigNumber& BigNumber :: operator+=(const BigNumber& other)
{
//BigNumber rez(*this);
int i, t;
int n = this->a[0], m = other.a[0];
for(i = 1, t = 0; i <= n || i <= m || t; ++i, t /= 10)
this->a[i] = (t += this->a[i] + other.a[i]) % 10;
this->a[0] = i - 1;
return *this;
}
int n;
int main() {
freopen("nunta.in", "rt", stdin);
scanf("%d", &n);
if(n <= 2)
{
freopen("nunta.out", "wt", stdin);
printf("%d\n", n);
}
else
{
BigNumber A(1, 1);
BigNumber B(1, 2);
BigNumber C;
for(int i = 3; i <= n; ++i) {
C = A;
C += B;
A = B;
B = C;
}
C.write_Data();
}
}