HDU 1316 How Many Fibs?
发布时间: 2012-11-07 09:56:10 作者: rapoo
HDU 1316 How Many Fibs? .
How Many Fibs?
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 1212????Accepted Submission(s): 501
42810942011-07-28 20:00:08Accepted1316156MS416K2614 BC++#include <iostream>#include <string>#include <vector>using namespace std;#define MAXI 486class Bnum{public :vector<int> n;int l;Bnum(string str = "0"){int i;l = str.length();n.resize(l);for (i = 0; i < l; i++)n[i] = str[l - i - 1] - 48;}Bnum & operator = (Bnum &o){l = o.l;n = o.n;return o;}friend Bnum operator + (Bnum a, Bnum b){Bnum c;int i, len = a.l > b.l? a.l: b.l;c.l = len + 1;c.n.resize(c.l);a.n.resize(c.l);b.n.resize(c.l);for (c.n[len] = i = 0; i < len; i++){c.n[i] += a.n[i] + b.n[i];c.n[i + 1] = c.n[i] / 10;c.n[i] %= 10;}if (!c.n[c.l - 1]) c.n.resize(--c.l);return c;}friend bool operator < (Bnum a, Bnum b){int i;if (a.l == b.l){for (i = a.l - 1; i >= 0; i--)if (a.n[i] < b.n[i]) return 1;else if (a.n[i] > b.n[i]) return 0;return 0;}else return a.l < b.l;}friend bool operator > (Bnum a, Bnum b){int i;if (a.l == b.l){for (i = a.l - 1; i >= 0; i--)if (a.n[i] > b.n[i]) return 1;else if (a.n[i] < b.n[i]) return 0;return 0;}else return a.l > b.l;}friend bool operator == (Bnum a, Bnum b){int i;if (a.l == b.l){for (i = a.l - 1; i >= 0; i--)if (a.n[i] != b.n[i]) return 0;return 1;}else return 0;}friend bool operator <= (Bnum a, Bnum b) { return a == b || a < b; }friend bool operator >= (Bnum a, Bnum b) { return a == b || a > b; }friend ostream & operator << (ostream & output, Bnum &o){int i;for (i = 0; i < o.l; i++)output << o.n[o.l - i - 1];return output;}friend istream & operator >> (istream & input, Bnum &o){string buf;input >> buf;o = Bnum(buf);return input;}}fin[MAXI];void init(){int i;fin[1] = Bnum("1");fin[2] = Bnum("2");for (i = 3;; i++)if (fin[i - 1].l >= 102) break;else fin[i] = fin[i - 1] + fin[i - 2];}int main(){int i, sum;Bnum a, b;init();while (cin >> a >> b){if (a == Bnum("0") && b == Bnum("0")) break;for (sum = 0, i = 1; i < MAXI; i++)if (fin[i] > b) break;else if (a <= fin[i] && fin[i] <= b)sum++;cout << sum << endl;}return 0;}
?下面贴上K神关于呢个题目既博文!!!
http://972169909-qq-com.iteye.com/blog/1133478