ZOJ 1962 How Many Fibs?
2013-07-06 21:12
344 查看
ZOJ 1962 How Many Fibs?
这道题从下午开始写真的是一停不停的写到了晚上,一开始没用函数,就字符收进两个字符串,每收一组就把所有fibs计算一遍,哼哼!果断超时了。
然后老师特意讲了二位数组的指针思想,然后又给了一个用C写的例子,哈哈,看着这个例子处理方法和我一样,可是用了函数就好太多。
题意:关于大数。给出两个大数,计算这两个大数的闭区间中有几个斐波那契数。关于斐波那契数,也是大数问题,可以先去做ZOJ 1828,感谢钟老师。
细节+代码如下:
这道题从下午开始写真的是一停不停的写到了晚上,一开始没用函数,就字符收进两个字符串,每收一组就把所有fibs计算一遍,哼哼!果断超时了。
然后老师特意讲了二位数组的指针思想,然后又给了一个用C写的例子,哈哈,看着这个例子处理方法和我一样,可是用了函数就好太多。
题意:关于大数。给出两个大数,计算这两个大数的闭区间中有几个斐波那契数。关于斐波那契数,也是大数问题,可以先去做ZOJ 1828,感谢钟老师。
细节+代码如下:
#include<stdio.h> #include<string.h> char a[500]; /*注意它是全局的。*/ void add(char *c,char *b){ int k,sum[600],mark,old[600],newe[600],mc,mb; char t; memset(old,0,sizeof(old)); /*第一次用这个函数,其实我还尝试用它来初始化字符串,*/ memset(newe,0,sizeof(newe)); /*只要写成'0',竟然可以!百度上中间变量写的整型。*/ mc = strlen(c)-1; mb = strlen(b)-1; for(k = 0;k<=mc/2;k++){ /*反转呐。*/ t = c[k]; /*有人曾问我为什么那么依赖Debug,想想真的想哭。*/ c[k] = c[mc-k]; c[mc-k] = t; } for(k = 0;k<=mb/2;k++){ t = b[k]; b[k] = b[mb-k]; b[mb-k] = t; } for(k = 0;k<=mc;k++) old[k] = c[k]-'0'; for(k = 0;k<=mb;k++) newe[k] = b[k]-'0'; for(k = 0;k<=500;k++) sum[k] = old[k]+newe[k]; for(k = 0;k<=500;k++){ if(sum[k]>=10){ sum[k+1] = sum[k+1]+sum[k]/10; sum[k] = sum[k]%10; } } for(k = 500;k>=0;k--){ if(sum[k]!=0){ mark = k; break; } } for(k = 0;k<=mark;k++) a[k] = sum[mark-k]+'0'; a[mark+1] = '\0'; for(k = 0;k<=mc/2;k++){ /*用完再反转过来,不然这个函数用的指针,*/ t = c[k]; /*操作对变量的处理结果不会消亡。*/ c[k] = c[mc-k]; c[mc-k] = t; } for(k = 0;k<=mb/2;k++){ t = b[k]; b[k] = b[mb-k]; b[mb-k] = t; } } int cmp(char *a,char *b){ int ma,mb; ma = strlen(a)-1; mb = strlen(b)-1; if(ma<mb) /*明明比较的方法一样,为什么别人就能写的这么齐整?*/ return -1; else if(ma>mb) return 1; else return strcmp(a,b); } int main(){ int i,n; char small[600],large[600],fb[600][600]; strcpy(fb[1],"1"); /*双引号,它表示的是字符串呀。函数用得好~!*/ strcpy(fb[2],"2"); for(i = 3;i<=500;i++){ add(fb[i-2],fb[i-1]); strcpy(fb[i],a); } while(scanf("%s%s",small,large)!=EOF){ n = 0; if(strcmp(small,"0")==0&&strcmp(large,"0")==0) /*函数用得好!*/ break; for(i = 1;i<=500;i++){ if(cmp(small,fb[i])<=0&&cmp(large,fb[i])>=0) n++; if(cmp(large,fb[i])<=0) break; } printf("%d\n",n); } return 0; }
相关文章推荐
- 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?(大数~)
- zoj 1962 || poj 2413 How many Fibs?
- hdoj 1316 How Many Fibs? 【Java大数】+【打表】
- How many Fibs?(JAVA)大数
- zoj2760 How Many Shortest Path dinic 最大流
- ZOJ3556 How Many Sets I(容斥)
- poj 2413 How many Fibs?
- ZOJ 2760 How Many Shortest Path 最大流+floyd求最短路
- hdu1316(How Many Fibs?)高精度
- 【zoj2760】【最大流】How Many Shortest Path
- 二分查找+大整数加法——Poj 2413 How many Fibs?
- HD-ACM算法专攻系列(13)——How Many Fibs?
- HDU_How Many Fibs求数列区间数目
- ZOJ - 3950 How Many Nines 年份大模拟
- POJ 2413 How many Fibs?(高精度)
- [容斥原理] zoj 3556 How Many Sets I