POJ 2413 How many Fibs?
2014-06-14 13:55
405 查看
大数区间Fibonacci数的个数
const int maxn = 9999 ; // 每位储存4位 const int dig = 4 ; class BigNum{ public : int a[60] ; int len ; BigNum(){len = 1 ; memset(a , 0 , sizeof(a)) ;} BigNum(const int) ; BigNum(const char*) ; BigNum operator +(const BigNum &) const ; bool operator >= (const BigNum &) const ; friend ostream& operator <<(ostream &out , const BigNum&T) ; }; BigNum::BigNum(const int T){ int t = T ; len = 0 ; memset(a , 0 , sizeof(a)) ; while(t > maxn){ a[len++] = t - t/(maxn+1)*(maxn+1) ; t = t/(maxn+1) ; } a[len++] = t ; } BigNum::BigNum(const char* s){ memset(a , 0 , sizeof(a)) ; int t , i , j , k , id = 0 , l = strlen(s) ; len = l/dig ; if(l%dig) len++ ; for(i = l-1 ; i >= 0 ; i -= dig){ t = 0 ; k = max(0 , i - dig + 1); for(j = k ; j <= i ; j++) t = t*10 + s[j] - '0' ; a[id++] = t ; } } ostream& operator <<(ostream &out , const BigNum&T){ printf("%d" , T.a[T.len-1]) ; for(int i = T.len-2 ; i >= 0 ; i--) printf("%04d" ,T.a[i]) ; return out ; } BigNum BigNum::operator + (const BigNum &T) const{ BigNum s ; s.len = max(len , T.len) ; for(int i = 0 ; i < s.len ; i++){ s.a[i] += a[i] + T.a[i] ; if(s.a[i] > maxn){ s.a[i+1]++ ; s.a[i] %= (maxn+1) ; } } if(s.a[s.len]!=0) s.len++ ; return s ; } bool BigNum::operator>= (const BigNum &T) const{ if(len > T.len) return 1 ; else if(len == T.len){ int i = len-1 ; while(i >= 0 && a[i] == T.a[i]) i-- ; if(i >= 0 && a[i] < T.a[i]) return 0 ; else return 1 ; } else return 0 ; } vector <BigNum> lis ; int main(){ lis.clear() ; lis.push_back(BigNum("1")) ; lis.push_back(BigNum("2")) ; int i , s ; for(i = 2 ; ; i++){ BigNum b = lis[i-1] + lis[i-2] ; if(b.len > 100) break ; lis.push_back(b) ; } BigNum l , r ; char a[108] , b[108] ; while(scanf("%s%s" ,a , b)){ if(strcmp(a , "0")== 0 && strcmp(b , "0") == 0) break ; l = BigNum(a) , r = BigNum(b) ; for(i = s = 0 ; i < lis.size() ; i++){ if(lis[i] >= l && r >= lis[i]) s++ ; } printf("%d\n" , s) ; } return 0 ; }
相关文章推荐
- POJ 2413 : How many Fibs? - JAVA大数! / 二分查找+大数加法
- POJ 2413 How many Fibs?(高精度暴力)
- POJ 2413 How many Fibs?#二分+大数加法
- 二分查找+大整数加法——Poj 2413 How many Fibs?
- hdu 1316 poj 2413 how many Fibs
- zoj 1962 || poj 2413 How many Fibs?(大数~)
- poj 2413 java How many Fibs?
- POJ 2413 How many Fibs?(高精度)
- poj 2413 How many Fibs?
- (高精度运算4.7.31)POJ 2413 How many Fibs?(大数累加)
- POJ 2413 How many Fibs? /HDOJ 1316 How Many Fibs?
- POJ 2413 How many Fibs? 笔记
- poj 2413 How many Fibs?
- POJ2413 How many Fibs?【高精度】【二分】
- poj 2413 How many Fibs? 大数累加模板+字符串模拟大数比较大小
- 二分查找+大整数加法——Poj 2413 How many Fibs?
- UVa 10183/EOJ 1297/POJ 2413/HDU 1316/ZOJ 1962 How many Fibs?【Java大整数类应用】
- zoj 1962 || poj 2413 How many Fibs?
- How many Fibs?(poj 2413)大数斐波那契
- POJ 2413 How many Fibs? .