hdu1316(How Many Fibs?)高精度
2014-07-21 17:26
337 查看
Problem Description
Recall the definition of the Fibonacci numbers:
f1 := 1
f2 := 2
fn := fn-1 + fn-2 (n >= 3)
Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b].
Input
The input contains several test cases. Each test case consists of two non-negative integer numbers a and b. Input is terminated by a = b = 0. Otherwise, a <= b <= 10^100. The numbers a and b are given with no superfluous leading zeros.
Output
For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b.
Sample Input
10 100
1234567890 9876543210
0 0
Sample Output
5
4求给定的区间范围内 有多少个斐波那契数列 打表得到长度100以内的所有斐波那契数 然后与左右端点进行比较即可
Recall the definition of the Fibonacci numbers:
f1 := 1
f2 := 2
fn := fn-1 + fn-2 (n >= 3)
Given two numbers a and b, calculate how many Fibonacci numbers are in the range [a, b].
Input
The input contains several test cases. Each test case consists of two non-negative integer numbers a and b. Input is terminated by a = b = 0. Otherwise, a <= b <= 10^100. The numbers a and b are given with no superfluous leading zeros.
Output
For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b.
Sample Input
10 100
1234567890 9876543210
0 0
Sample Output
5
4求给定的区间范围内 有多少个斐波那契数列 打表得到长度100以内的所有斐波那契数 然后与左右端点进行比较即可
#include <iostream> #include <cstring> #include <cstdio> using namespace std; const int N = 570; const int len =150; char fib [len]; void Bigadd(char a[],char b[],char c[]) { int n=strlen(a); int m=strlen(b); char temp; int i,j,e,d; for(i=0; i<m/2; i++) { temp=b[i]; b[i]=b[m-1-i]; b[m-1-i]=temp; } for(i=0; i<n/2; i++) { temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } d=0; e=0; for(i=0;i<n&&i<m;i++) { d=a[i]-'0'+b[i]-'0'+e; c[i]=d%10+'0'; e=d/10; } if(i==m) { for(;i<n;i++) { d=a[i]-'0'+e; c[i]=d%10+'0'; e=d/10; } } if(i==n) { for(;i<m;i++) { d=b[i]-'0'+e; c[i]=d%10+'0'; e=d/10; } } if(e) c[i++]=e+'0'; int t=i; for(i=0; i<t/2; i++) { temp=c[i]; c[i]=c[t-1-i]; c[t-1-i]=temp; } for(i=0; i<m/2; i++) { temp=b[i]; b[i]=b[m-1-i]; b[m-1-i]=temp; } for(i=0; i<n/2; i++) { temp=a[i]; a[i]=a[n-1-i]; a[n-1-i]=temp; } } int cmp(char a[],char b[]) { int len1=strlen(a); int len2=strlen(b); if(len1==len2){ return strcmp(a,b); } else if(len1>len2) return 1; return -1; } void init() { fib[1][0]='1'; fib[2][0]='2'; for(int i=3;i<N;i++) Bigadd(fib[i-1],fib[i-2],fib[i]); } int main() { char a[len],b[len]; init(); while(cin>>a>>b){ if(a[0]=='0'&&b[0]=='0') break; int cnt=0; for(int i=1; i<N; i++) { if(cmp(fib[i],a)>=0&&cmp(fib[i],b)<=0) cnt++; } cout<<cnt<<endl; } return 0; }
相关文章推荐
- How Many Fibs? hdu1316 高精度
- Java 大数之大数高精度斐波那契 UVA_10579&&HDU1316 How many Fibs?
- JAVA hdu 1316 How Many Fibs?(高精度)
- HDU1316:How Many Fibs?
- POJ 2413 How many Fibs?(高精度)
- POJ2413 How many Fibs(高精度)(AC)
- POJ2413 How many Fibs?【高精度】【二分】
- POJ 2413 How many Fibs?(高精度暴力)
- HDU1316:How Many Fibs?(大数JAVA)
- How many Fibs?(高精度)
- HDU1316 How Many Fibs? 【大数】
- hdu 1316 How Many Fibs? (模拟高精度)
- hdu1316 How Many Fibs?(大数)
- pku 2413 How many Fibs? 【java高精度】
- How Many Fibs? hdu1316
- 数论 - 高精度Fibonacci数 --- UVa 10183 : How Many Fibs ?
- (高精度运算4.7.31)POJ 2413 How many Fibs?(大数累加)
- UVA - 10183 - How Many Fibs? (斐波那契 + 高精度)
- hdu 1316 How Many Fibs?(Fibonacci+高精度+二分)
- 数论 - 高精度Fibonacci数 --- UVa 10183 : How Many Fibs ?