poj 2413 大数模拟(区间内的斐波那契数个数)
2015-02-10 12:58
399 查看
题意:给定两个数a<=b<=10^100,求区间[a,b]内的斐波那契数的数量。
思路:数组模拟枚举出100位以内的斐波那契数,然后写一个比较函数进行比较即可。其中一个地方让我wa了n次:temp = f[i-2][j]+f[i-1][j]+f[i][j];写成了temp = f[i-2][j]+f[i-1][j];快哭了~~~
思路:数组模拟枚举出100位以内的斐波那契数,然后写一个比较函数进行比较即可。其中一个地方让我wa了n次:temp = f[i-2][j]+f[i-1][j]+f[i][j];写成了temp = f[i-2][j]+f[i-1][j];快哭了~~~
#include <stdio.h> #include <string.h> #define N 155 int f[1000] ; char a ,b ; int len=1,num; int fibo(){ int i,j,temp; memset(f,0,sizeof(f)); f[0][0] = 1; f[1][0] = 2; for(i = 2;len<101;i++){ for(j = 0;j<len;j++){ temp = f[i-2][j]+f[i-1][j]+f[i][j];//~~~~~~~~~~~~~~ f[i][j] = temp % 10; f[i][j+1] = temp / 10; } if(f[i][len]) len++; } return i-1; } int cmp(char x ,int y ){ int i,j,strl; strl = strlen(x); for(i = 100;i>=0;i--) if(y[i]) break; if(strl == i+1){ for(j = i;j>=0;j--){ if(x[j] > (char)(y[j]+'0')) return 1; if(x[j] < (char)(y[j]+'0')) return -1; } return 0; } else if(strl > i+1) return 1; return -1; } void reverse(char* x){//将字符串逆转 int i,k = strlen(x); char j; for(i = 0;i<k/2;i++){ j = x[k-1-i]; x[k-1-i] = x[i]; x[i] = j; } } int main(){ num = fibo();//产生100位以内的斐波那契数列 while(scanf("%s %s",a,b)){ int i,res=0; if(a[0] == '0' && b[0] == '0') break; reverse(a); reverse(b); for(i = 0;i<num && cmp(b,f[i])>=0;i++) if(cmp(a,f[i])<=0) res++; printf("%d\n",res); } return 0; }
相关文章推荐
- 问题 : 来简单地数个数(大数模拟计算斐波那契数+区间数数)
- poj 2413 How many Fibs? 大数累加模板+字符串模拟大数比较大小
- How many Fibs?(poj 2413)大数斐波那契
- poj 1047 模拟(含大数乘法)循环数
- poj 2506 Tiling——递推和大数模拟
- POJ 2761(Treap离线求区间第k大数)
- UVA_10183||POJ_2413||ZOJ_1962||HDU_1316(大数加法、检索)
- poj 3508 Hide That Number(模拟大数减法)
- POJ 2413 How many Fibs?#二分+大数加法
- POJ 2104 K-th Number(区间第k大数)(平方切割,归并树,划分树)
- POJ 2506 Tiling(大数递推&&(数组模拟||JAVA))
- zoj 1962 || poj 2413 How many Fibs?(大数~)
- poj 2104 划分树(查询区间第k大数)
- POJ 2104 K-th Number(区间第k大数)(平方分割,归并树,划分树)
- 划分树学习小记 Poj 2104+Poj 2761+Hdu 2665 (区间第k大数)
- (高精度运算4.7.31)POJ 2413 How many Fibs?(大数累加)
- POJ 2506 Tiling (递推 + 大数加法模拟 )
- poj 2689 Prime Distance(大数区间素数筛法)
- POJ 2413 : How many Fibs? - JAVA大数! / 二分查找+大数加法
- poj 1001 -- Exponentiation (大数计算,模拟)