C++计算斐波那契数列第n项(类型越界算法)
2013-11-18 09:17
946 查看
#include<stdio.h> #include<string.h> void sum(char a[],char b[]) { int i,n,k; for(i=strlen(b)-1,k=0;i>=0;k++,i--) { a[k]+=b[i]-'0'; n=k; while(a >'9') { a[n+1]+=(a -'0')/10; a =(a -'0')%10+'0'; n++; } } } int main() { char a[101],b[101],fib[500][201]={0},ch; int i,j,k,c,n; strcpy(fib[1],"1"); strcpy(fib[2],"2"); fib[0][0]='1'; for(i=1;i<101;i++) fib[0][i]='0'; for(i=3;i<500;i++) { for(j=0;j<201;j++) fib[i][j]='0'; } for(i=3;;i++) { sum(fib[i],fib[i-1]); sum(fib[i],fib[i-2]); for(j=200;fib[i][j]=='0';j--); fib[i][j+1]='\0'; for(k=0;k<=j;k++,j--) { ch=fib[i][k]; fib[i][k]=fib[i][j]; fib[i][j]=ch; } if(strlen(fib[i])>100||(strlen(fib[i])==101&&strcmp(fib[i],fib[0])>=0)) break; } n=i; for(i=0;i<100;i++) { printf("fib[%d]=%s\n",i,fib[i]); } /*while(scanf("%s%s",a,b)!=EOF&&(strcmp(a,"0")!=0||strcmp(b,"0")!=0)) { c=0; for(i=1;i<=n;i++) { if(strcmp(fib[i],a)>=0&&strlen(fib[i])==strlen(a)||strlen(fib[i])>strlen(a)) if(strcmp(b,fib[i])>=0&&strlen(b)==strlen(fib[i])||strlen(b)>strlen(fib[i])) c++; } printf("%d\n",c); }*/ }
本文出自 “PHP程序猿” 博客,请务必保留此出处http://okowo.blog.51cto.com/4923464/1327750
相关文章推荐
- 算法学习记录六(C++)--->获取斐波那契数列第n项
- c++ 使用深度优先搜索算法计算N位水仙数
- C/C++中算法运行时间的三种计算方式
- C/C++中算法运行时间的三种计算方式
- C++求斐波那契数列的第n项
- 数据结构—中缀表达式转后缀表达式算法及实现—栈的应用—计算表达式(C++代码实现)(1)
- 利用C++模板特性计算各整数类型的最大最小值
- 算法如功夫——C++ 用递归函数计算n的阶乘n!
- 奇妙的算法—Python计算斐波那契数列
- C/C++中算法运行时间的三种计算方式(By 虚怀若谷)
- 计算斐波那契数列,两种方法,打开注释掉的语句你会感受到算法的力量
- C++ 计算算法耗时
- 用递归法计算斐波那契数列的第n项
- * 期末考试 编程题#5:计算数组的低3位之和(Coursera 程序设计与算法 专项课程3 C++程序设计 郭炜、刘家瑛;for_each用法)
- 信息学奥赛一本通算法(C++版)基础算法:高精度计算
- double*等指针类型所占字节数 float* long* int* short* 要求用sizeof 运算符计算C++中char*
- C++中常见数据类型的sizeof值,以及计算struct和union的详细方法
- c++ 很隐蔽的指针访问越界--在类型转换中出现情况
- C/C++编程小练习 计算10亿之内的素数和(合数筛选算法实现)
- [置顶] 信息学奥赛一本通(C++版) 第二部分 基础算法 第一章 高精度计算