关于高精度数的问题:求斐波那契数列在一个区间内有几个数。区间要求0-10^100内。
来源:互联网 发布:js遍历所有标签 编辑:程序博客网 时间:2024/05/17 16:55
Description
Recall the definition of the Fibonacci numbers:
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<=10100. 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
#include<stdio.h> #include<string.h> #define N 101char a[101];char b[101];char c[101];char fib[N][101];void reverse(char *ch){int len = strlen(ch);int i;char tmp;for(i = 0;i < len/2;i++){tmp = ch[i];ch[i] = ch[len-i-1];ch[len-i-1] = tmp;}}void add(char *a,char *b){int lena = strlen(a);int lenb = strlen(b);int i;int carry = 0;memset(c,0,101);for(i = 0;i < lena ||i < lenb;i++){if(i < lena && i < lenb){c[i] = a[lena-i-1] + b[lenb-i-1] + carry - '0';carry = 0;if(c[i] > '9'){c[i] -= 10;carry = 1;}}else if(i >= lena ){c[i] = b[lenb-i-1] +carry;carry = 0;if(c[i] > '9'){c[i] -= 10;carry = 1;}}else if(i >= lenb ){c[i] = a[lena-i-1] +carry;carry = 0;if(c[i] > '9'){c[i] -= 10;carry = 1;}}}if(carry == 1)c[i] = '1';reverse(c);}void fill_fib(){int i;strcpy(fib[1],"1");strcpy(fib[2],"2");for(i = 3;i < 101;i++){add(fib[i-1],fib[i-2]);strcpy(fib[i],c);}}void sub(char *n){int lena = strlen(n);if(n[lena-1] != '0'){n[lena-1]--;return;}int i = 0;while(n[lena-1-i] == '0'){n[lena-1-i] = '9';i++;}n[lena-1-i]--;return;}int cmp(char * a,char *b){if(strlen(a) > strlen(b))return 1;else if(strlen(a) < strlen(b))return -1;else{int i = 0;for(i = 0; i < strlen(a);i++){if(a[i] > b[i])return 1;else if(a[i] < b[i])return -1;else continue;}}}int main(){memset(a,0,101);memset(b,0,101);fill_fib();while(1){scanf("%s%s",a,b);if(a[0] == '0' || b[0] == '0')break;int count = 0,i = 0;while(cmp(b,fib[++i]) > 0){if(cmp(a,fib[i]) <= 0)count++;}printf(" count = %d\n",count);}return 0;}
阅读全文
0 0
- 关于高精度数的问题:求斐波那契数列在一个区间内有几个数。区间要求0-10^100内。
- poj 2413 大数模拟(区间内的斐波那契数个数)
- 区间内出现某个数k次的数目问题
- 给出一个区间[a, b],计算区间内“神奇数”的个数。
- Codeforces Round #365 (Div. 2) D 线段树+离线 (区间内的数有哪些
- 包含在其他区间内的区间
- 统计输入的整数区间内回文数的个数
- hdu 4358 欧拉树形变线性+树状数组+离散化+离线+区间内出现k次的不同的数有几个+手动扩展栈
- POJ 3368 线段树,给定区间求连续不降序列的在该区间内出现最多的数
- 查找给定区间内第K大/小的数
- hdu3709(求区间内平衡数的个数)数位dp
- SPOJ DQUERY 区间内不同数的个数 主席树
- 北航11年机试--求指定区间内的孪生数
- 输出区间[a , b]内的完数
- SPOJ DQUERY 区间内不同数的个数
- hdu 4417 划分树 求一个区间内小于n的数
- 数组中最长的区间,满足该区间内的数排序后是连续的。
- 数组中最长的区间,满足该区间内的数排序后是连续的。
- 复习之HTML(3)
- BZOJ 2879: [Noi2012]美食节 费用流 动态加边
- (6)堆排序
- 处理 Vue 单页面应用 SEO 的另一种思路
- shell脚本编写规范(超实用)
- 关于高精度数的问题:求斐波那契数列在一个区间内有几个数。区间要求0-10^100内。
- 树链剖分求LCA
- 集合框架
- spring security
- centOS 7 安装redis
- mybatis的jar版本问题
- create user rm identified by rmrm;-- 创建新的用户 --grant 权限1、权限2...to 用户 给创建用户权限 --ex:grant create ses
- JDBC的基本概念理解以及简单实现
- Oracle数据库分页的三种方法