Uva 10579 - Fibonacci Numbers
#include<bits/stdc++.h>
using namespace std;
string fibo_num[1000+19];
string not_equal(string a, string b)
{
int i=a.size()-1,j=b.size()-1, sum=0, carry=0;
string s="";
for(; i>=0; i--)
{
sum = a[i] - 48;
if(j>=0)
{
sum += (b[j] - 48);
j--;
}
sum+=carry;
if(sum > 10)
{
s += (sum % 10) + 48 ;
carry = sum/10;
}
else
{
s += (sum % 10) + 48;
carry = sum / 10;
}
}
if(carry)
{
s+=(carry + 48);
}
reverse(s.begin(), s.end());
return s;
}
string _equal(string a, string b)
{
int i=a.size()-1, j=b.size()-1, sum=0, carry=0;
string s="";
for(; i>=0, j>=0; i--, j--)
{
sum = (a[i]-48) + (b[j]-48);
sum+=carry;
if(sum > 10)
{
s += (sum % 10) + 48;
carry = sum / 10;
}
else
{
s += (sum % 10) + 48;
carry = sum / 10;
}
}
if(carry)
{
s+=(carry + 48);
}
reverse(s.begin(), s.end());
return s;
}
void get_fibonacci()
{
fibo_num[0] = "0";
fibo_num[1] = "1";
for(int i=2; i<=1009; i++)
{
string x = fibo_num[i-1];
string y = fibo_num[i-2];
if(x.size() > y.size())
{
fibo_num[i] = not_equal(x,y);
}
else if(x.size() < y.size())
{
swap(x,y);
fibo_num[i] = not_equal(x,y);
}
else
{
fibo_num[i] = _equal(x,y);
}
}
}
int main()
{
get_fibonacci();
int n;
while(cin >> n)
{
cout << fibo_num[n] << "\n";
}
return 0;
}
using namespace std;
string fibo_num[1000+19];
string not_equal(string a, string b)
{
int i=a.size()-1,j=b.size()-1, sum=0, carry=0;
string s="";
for(; i>=0; i--)
{
sum = a[i] - 48;
if(j>=0)
{
sum += (b[j] - 48);
j--;
}
sum+=carry;
if(sum > 10)
{
s += (sum % 10) + 48 ;
carry = sum/10;
}
else
{
s += (sum % 10) + 48;
carry = sum / 10;
}
}
if(carry)
{
s+=(carry + 48);
}
reverse(s.begin(), s.end());
return s;
}
string _equal(string a, string b)
{
int i=a.size()-1, j=b.size()-1, sum=0, carry=0;
string s="";
for(; i>=0, j>=0; i--, j--)
{
sum = (a[i]-48) + (b[j]-48);
sum+=carry;
if(sum > 10)
{
s += (sum % 10) + 48;
carry = sum / 10;
}
else
{
s += (sum % 10) + 48;
carry = sum / 10;
}
}
if(carry)
{
s+=(carry + 48);
}
reverse(s.begin(), s.end());
return s;
}
void get_fibonacci()
{
fibo_num[0] = "0";
fibo_num[1] = "1";
for(int i=2; i<=1009; i++)
{
string x = fibo_num[i-1];
string y = fibo_num[i-2];
if(x.size() > y.size())
{
fibo_num[i] = not_equal(x,y);
}
else if(x.size() < y.size())
{
swap(x,y);
fibo_num[i] = not_equal(x,y);
}
else
{
fibo_num[i] = _equal(x,y);
}
}
}
int main()
{
get_fibonacci();
int n;
while(cin >> n)
{
cout << fibo_num[n] << "\n";
}
return 0;
}
Comments
Post a Comment