生活随笔
收集整理的這篇文章主要介紹了
(大整数类Biginteger)大斐波数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
Fibonacci數列,定義如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
計算第n項Fibonacci數值。
輸入
輸入第一行為一個整數N,接下來N行為整數Pi(1<=Pi<=1000)。
輸出
輸出為N行,每行為對應的f(Pi)。
樣例輸入
5
1
2
3
4
5
樣例輸出
1
1
2
3
5
分析與解答:
biginteger分析參見:
https://blog.csdn.net/mrcrack/article/details/53263235
代碼:
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
struct BigInteger {
static const int BASE =
100000000;
static const int WIDTH =
8;
vector<int> s;BigInteger(
long long num =
0) { *
this = num; } BigInteger
operator = (
long long num) { s.clear();
do {s.push_back(num % BASE);num /= BASE;}
while (num >
0);
return *
this;}BigInteger
operator = (
const string& str) { s.clear();
int x, len = (str.length() -
1) / WIDTH +
1;
for (
int i =
0; i < len; i++) {
int end = str.length() - i*WIDTH;
int start = max(
0, end - WIDTH);
sscanf(str.substr(start, end - start).c_str(),
"%d", &x);s.push_back(x);}
return *
this;}BigInteger
operator + (
const BigInteger& b)
const {BigInteger c;c.s.clear();
for (
int i =
0, g =
0; ; i++) {
if (g ==
0 && i >= s.size() && i >= b.s.size())
break;
int x = g;
if (i < s.size()) x += s[i];
if (i < b.s.size()) x += b.s[i];c.s.push_back(x % BASE);g = x / BASE;}
return c;}
};ostream&
operator << (ostream &out,
const BigInteger& x) {out << x.s.back();
for (
int i = x.s.size() -
2; i >=
0; i--) {
char buf[
20];
sprintf(buf,
"%08d", x.s[i]);
for (
int j =
0; j <
strlen(buf); j++) out << buf[j];}
return out;
}istream&
operator >> (istream &in, BigInteger& x) {
string s;
if (!(in >> s))
return in;x = s;
return in;
}
int main(){BigInteger a,b,ans[
1005];ans[
1]=
1;ans[
2]=
1;
for(
int i=
3;i<=
1001;++i){ans[i]=ans[i-
1]+ans[i-
2];}
int n;
cin>>n;
while(n--){
int i;
cin>>i;
cout<<ans[i]<<endl;}
}
總結
以上是生活随笔為你收集整理的(大整数类Biginteger)大斐波数的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。