杭电 1316 How Many Fibs?
2013-05-11 07:33
302 查看
[align=left]Problem Description[/align]
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].
[align=left]Input[/align]
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.
[align=left]Output[/align]
For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b.
[align=left]Sample Input[/align]
10 100
1234567890 9876543210
0 0
[align=left]Sample Output[/align]
5
4
[align=left]Source[/align]
University of Ulm Local Contest 2000
[align=left]Recommend[/align]
Eddy
此题与大菲波数那题有些类似,我在处理的时候,都是先用一个二维数组存储大菲波数。不同的是,本题需要对用个用数组存储的所谓大数进行比较,需要写一个大数比较的函数,通过该函数的返回值来判断两个大数的大小,以下是代码:
View Code
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].
[align=left]Input[/align]
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.
[align=left]Output[/align]
For each test case output on a single line the number of Fibonacci numbers fi with a <= fi <= b.
[align=left]Sample Input[/align]
10 100
1234567890 9876543210
0 0
[align=left]Sample Output[/align]
5
4
[align=left]Source[/align]
University of Ulm Local Contest 2000
[align=left]Recommend[/align]
Eddy
此题与大菲波数那题有些类似,我在处理的时候,都是先用一个二维数组存储大菲波数。不同的是,本题需要对用个用数组存储的所谓大数进行比较,需要写一个大数比较的函数,通过该函数的返回值来判断两个大数的大小,以下是代码:
View Code
#include <stdio.h> #include <stdlib.h> #include <string.h> int fib[700][105]; void add( int *num1, int *num2, int *num3 ) { int i; memset(num3, 0, 105 * sizeof(int)); for( i = 0; i < 105; i++ ) { num3[i] += (num1[i] + num2[i]); if( num3[i] >= 10 ) { num3[i+1]++; num3[i] = num3[i] % 10; } } } int compare( int *num1, int *num2 ) { //for( i = 104; i >= 0; i-- ) int i, len1, len2, temp; for( i = 104; i >= 0; i-- ) if( num1[i] != 0 ) break; len1 = i; for( i = 104; i >= 0; i-- ) if( num2[i] != 0 ) break; len2 = i; if( len1 > len2 ) return 1; else if( len1 == len2 ) { temp = len1; while( (num1[temp] == num2[temp])&&( temp != -1 ) ) temp--; if( temp == -1 ) return 0; else return (num1[temp]- num2[temp]); } else return -1; } int main(int argc, char *argv[]) { int i, len1, len2, cnt, left, right, n; char s1[105], s2[105]; int num1[105], num2[105]; memset(fib[0], 0, 110 * sizeof(int)); memset(fib[1], 0, 110 * sizeof(int)); fib[0][0] = 1; fib[1][0] = 1; for( i = 2; i < 700; i++ ) add(fib[i-2], fib[i-1], fib[i]); while( scanf( "%s %s", s1, s2 ) != EOF ) { //printf( "%s %s\n", s1, s2 ); if( (strcmp( s1, "0" )==0)&&(strcmp( s2, "0" )==0) ) break; len1 = strlen(s1); len2 = strlen(s2); //printf( "%d %d\n", len1, len2 ); memset(num1, 0, 105 * sizeof(int)); memset(num2, 0, 105 * sizeof(int)); cnt = 0; for( i = len1 - 1; i >= 0; i-- ) num1[cnt++] = s1[i] - '0'; /*for( i = 0; i < cnt; i++ ) printf( "%d", num1[i] ); printf( "\n" );*/ cnt = 0; for( i = len2 - 1; i >= 0; i-- ) num2[cnt++] = s2[i] - '0'; /*for( i = 0; i < cnt; i++ ) printf( "%d", num2[i] ); printf( "\n" );*/ left = -1; for( i = 1; i < 700; i++ ) { if( (compare( fib[i], num1 ) >= 0)&&( left == -1 ) ) left = i; if( compare( fib[i], num2 ) > 0 ) { right = i; break; } } //printf( "%d %d\n", left, right ); printf( "%d\n", right - left ); /*while( scanf( "%d", &n ) != EOF ) { for( i = 104; i >= 0; i-- ) if( fib [i] != 0 ) break; for( ; i >= 0; i-- ) printf( "%d", fib [i] ); printf( "\n" ); }*/ } //system("PAUSE"); return 0; }
相关文章推荐
- 杭电OJ(HDOJ)1316题:How many Fibs?(大数操作——比较)
- 杭电1316(How Many Fibs?)
- 杭电 1316 How Many Fibs?
- 杭电oj-1316-How Many Fibs?
- ACM HDOJ 1316 (How Many Fibs?)
- hdu 1316 How Many Fibs?(Fibonacci+高精度+二分)
- HDOJ 1316 How Many Fibs?(Java大数开挂)
- JAVA hdu 1316 How Many Fibs?(高精度)
- hdu 1316 How Many Fibs?
- POJ 2413 How many Fibs? /HDOJ 1316 How Many Fibs?
- hdoj 1316 How Many Fibs? 【Java大数】+【打表】
- HDU 1316 How Many Fibs? 大数
- HDOJ&nbsp;1316&nbsp;How&nbsp;Many&nbsp;Fibs?
- HDU 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- HDU 1316 How Many Fibs? (大Fib数,还是Java大法好)
- HDU 1316 How Many Fibs? java大数(水
- 第四届图灵杯->How Many Fibs?(1316)
- HDU-1316 How Many Fibs?(Java大数)
- HDU-1316 How Many Fibs? 大数、二分问题 (C语言)