zoj 1962 How Many Fibs
2011-08-02 21:39
525 查看
//不够精简,效率也不高,以后学了傅里叶变换再做吧。。。 #define LOCAL #include<iostream> #include<cstring> #define N 1001 using namespace std; int cmp(int a ,string s) { char t; string b=s; int i,la,lb=b.size(); for(i=0;i<lb/2;i++) { t=b[i]; b[i]=b[lb-i-1]; b[lb-i-1]=t; } lb--; la=N-1; while(!a[la]) la--; if(la>lb) return 1; else if(la<lb) return -1; else { if(a[la]==(b[la]-'0')) //这里的判断也出了错误。。。 { i=la; while(a[i]==(b[i]-'0')&&i>=0) i--; if(i<0) return 0; else if(a[i]>(b[i]-'0')) return 1; else return -1; } else if(a[la]>(b[la]-'0')) return 1; else return -1; } } int main() { #ifdef LOCAL freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); #endif int sum ,a ,b ,n,i,t,count; string x,y; while(cin>>x>>y) { if(x=="0"&&y=="0") return 0; memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); memset(sum,0,sizeof(sum)); b[0]=1; count=0; while(1) { for(i=0;i<N;i++) sum[i]=a[i]+b[i]; for(i=0;i<N;i++) { t=sum[i]/10; sum[i]=sum[i]%10; sum[i+1]+=t; } if(cmp(sum,x)>=0&&cmp(sum,y)<=0) //cmp()一直出错,哎。。。 count++; else if(cmp(sum,y)>0) //这的条件弄错了,纠结了好半天。。。 break; memcpy(a,b,sizeof(int)*N); memcpy(b,sum,sizeof(int)*N); } cout<<count<<endl; } return 0; }
相关文章推荐
- zoj 1962 || poj 2413 How many Fibs?
- zoj 1962 How Many Fibs?(字符串化为数字处理)
- ZOJ 1962 How Many Fibs?
- ZOJ 1962 How Many Fibs?
- UVa 10183/EOJ 1297/POJ 2413/HDU 1316/ZOJ 1962 How many Fibs?【Java大整数类应用】
- zoj 1962 || poj 2413 How many Fibs?(大数~)
- poj 2413 How many Fibs? 大数累加模板+字符串模拟大数比较大小
- POJ 2413 How many Fibs?#二分+大数加法
- ZOJ_-1470--How Many Trees
- ZOJ 3556 How Many Sets I 解题报告(数论)
- ZOj 3950 How Many Nines (日起模拟,打表,预处理)
- HDOJ 1316 How Many Fibs?(Java大数开挂)
- zoj 2760 How Many Shortest Path 【最短路 + 最大流】 【求边不重复最短路径条数】
- 杭电 1316 How Many Fibs?
- HDU 1316 How Many Fibs?
- pku 2413 How many Fibs? 【java高精度】
- hdu1316 How Many Fibs?(大数)
- hdoj 1316 How Many Fibs?(大数)
- How many Fibs?(java)
- uva 10183 How many Fibs?