HDU-How many Fibs-给定区间求斐波那契数数目
来源:互联网 发布:麦哲伦星系 知乎 编辑:程序博客网 时间:2024/06/15 01:29
问题及代码:
运行结果:
给定区间求斐波那契数数目。
Problem B How many Fibs
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 1 Accepted Submission(s) : 1
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
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].
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 1001234567890 98765432100 0
Sample Output
54
/* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:HDU.cpp *作 者:单昕昕 *完成日期:2015年3月3日 *版 本 号:v1.0 */ #include <iostream>#include <string.h>#include <stdio.h>using namespace std;char fibs[10005][102];void add(int n){ int len_a=strlen(fibs[n-1]),len_b=strlen(fibs[n-2]); int p=len_a-1,q=len_b-1; int a[102],left=0; for (int i=0; i<102; i++) { a[i]=left; if (p>=0) a[i]+=fibs[n-1][p--]-'0'; if (q>=0) a[i]+=fibs[n-2][q--]-'0'; left=a[i]/10; a[i]%=10; } int i; for (i=101; i>=0; i--) { if (a[i]!=0) break; } int k=0; while (i>=0) { fibs[n][k++]=a[i--]+'0'; } fibs[n][k]=0;}bool cmp(char *a,char *b){ int len_a=strlen(a),len_b=strlen(b); if (len_a>len_b) return true; if (len_a<len_b) return false; int n=0; while (n<len_a) { if (a[n]-'0'>b[n]-'0') return true; if (a[n]-'0'<b[n]-'0') return false; n++; } return true;}int main(){ strcpy(fibs[0],"1"); strcpy(fibs[1],"2"); int k=1; while (strlen(fibs[k++])<101) { add(k); } char a[102],b[102]; while(scanf("%s %s",a,b),strcmp(a,"0")!=0||strcmp(b,"0")!=0) { int count=0; for (int i=0; i<=k; i++) { if (cmp(fibs[i],a)==false) continue; if (cmp(fibs[i],a)==true && cmp(b,fibs[i])==true) count++; if (cmp(b,fibs[i])==false) break; } cout<<count<<endl; } return 0;}
运行结果:
给定区间求斐波那契数数目。
学习心得:
高精度模拟,请收下我的膝盖。。
0 0
- HDU-How many Fibs-给定区间求斐波那契数数目
- hdu 1316 How Many Fibs?(高精度加法+ 斐波那契数)
- hdu 1316 How many Fibs?(高精度斐波那契数)
- How Many Fibs? HDU
- HDU_How Many Fibs求数列区间数目
- UVa 10183 How Many Fibs? (统计斐波那契数个数&高精度)
- uva 10183 - How Many Fibs?(斐波那契数)
- HDU 1316 How Many Fibs?
- HDU 1316 How Many Fibs?
- HDU 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- HDU 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- hdu 1316 How Many Fibs?
- Unity3D ParticleSystem粒子系统
- XML与JSON在Android 与服务器协同开发的比较
- ArrayList与LinkedList
- CRC16查表法
- 理解MySQL——索引与优化
- HDU-How many Fibs-给定区间求斐波那契数数目
- C# Dictionary用法总结
- 编程之美学习笔记:中国象棋将帅问题
- github中的常用库
- JS error:Expected identifier, string or number
- kettle初探
- Connection reset by peer: socket write error错误分析及解决 .
- 如何减少C++编写程序的CPU使用率
- ios cookie操作