Đề bài: Cho một số n - Hãy tìm số fibonacci thứ n
Định nghĩa. Fibonacci thứ n = f(n) = f(n-1) +f(n-2);
______________________________________________________________________
#include<iostream>
#include<fstream>
using namespace std;
long long so =1;
int n;
string so1;
void docfile()
{
fstream f("fib.inp");
f>>n;
f.close();
}
void ghifile()
{
ofstream f("fib.out");
f<<so1;
f.close();
}
void process1()
{
string S[] ={"0","1", "1", "2", "3", "5", "8", "13", "21", "34", "55", "89", "144", "233", "377", "610", "987", "1597", "2584", "4181", "6765", "10946", "17711", "28657", "46368", "75025", "121393", "196418", "317811", "514229", "832040", "1346269", "2178309", "3524578", "5702887", "9227465", "14930352", "24157817", "39088169", "63245986", "102334155", "165580141", "267914296", "433494437", "701408733", "1134903170", "1836311903", "2971215073", "4807526976", "7778742049", "12586269025", "20365011074", "32951280099", "53316291173", "86267571272", "139583862445", "225851433717", "365435296162", "591286729879", "956722026041", "1548008755920", "2504730781961", "4052739537881", "6557470319842", "10610209857723", "17167680177565", "27777890035288", "44945570212853", "72723460248141", "117669030460994", "190392490709135",
"308061521170129", "498454011879264", "806515533049393", "1304969544928657", "2111485077978050", "3416454622906707", "5527939700884757", "8944394323791464", "14472334024676221", "23416728348467685", "37889062373143906", "61305790721611591", "99194853094755497", "160500643816367088", "259695496911122585", "420196140727489673", "679891637638612258", "1100087778366101931", "1779979416004714189", "2880067194370816120"};
so1 = S[n];
}
void process2()
{
int s21[] = {0,0,0,0,0,0,0,2,8,8,0,0,6,7,1,9,4,3,7,0,8,1,6,1,2,0};
int s11[] = {0,0,0,0,0,0,0,1,7,7,9,9,7,9,4,1,6,0,0,4,7,1,4,1,8,9};
int s2[10000] ;
int s1[10000];
int s[10000];
int so = 90;
for(int i = 0; i<=25;i++)
{
s2[975+i] = s21[i];
s1[975+i] = s11[i];
}
int t=0;
while ( so < n )
{
for ( int i = 1000; i>=0 ;i-- )
{
t += s1[i] + s2[i];
s[i] = t% 10;
t /=10;
}
for (int i=0; i<=1000; i++)
{
s1[i] = s2[i];
s2[i] = s[i];
}
so++;
}
ofstream f("fib.out");
int i = 0;
while ( s2[i] == 0 )
i++;
for (; i<= 1000; i++)
f<<s2[i];
f.close();
}
int main()
{
docfile();
if ( n <=90)
{
process1();
ghifile();
}
else
process2();
}