答案错误50%,真不知道为什么会这样,大神给看看。
题目网址:http://题目:
题目描述
定义:
f(1)=1, f(2)=1, f(n>2)=f(n-1)+f(n-2)
我们把符合以上定义的序列称为斐波那契序列,现在给你一个数字n,请你求出f(n)。
输入
输入包含多组测试数据。每组数据为一个正整数n。
输出
输出对应的f(n)。题目保证结果不会超过1000位数字。
样例输入
100
样例输出
354224848179261915075
我的代码:
程序代码:
#include <stdio.h> #include <string.h> char f[10000][1001]; int add(const char *a, const char *b, char *result,int N) { char *p1 = strchr(a, 0)-1; char *p2 = strchr(b, 0)-1; result[N] = '\0'; int left, right, c, carry = 0; int j=0,i,t,len; while (p1 >= a || p2 >= b) { left = (p1 >= a) ? *p1 : '0'; right = (p2 >= b) ? *p2 : '0'; c = (left-'0') + (right-'0') + carry; carry = c/10; result[j++]=c % 10 + '0'; result[j]=carry +'0'; --p1; --p2; } result[j+1]='\0'; len=strlen(result); for(i=0;i<len/2;i++){ t=result[i]; result[i]=result[len-i-1]; result[len-i-1]=t; } return j+1; } int main(){ int n,i,last=2,max=0; f[0][0]=f[1][0]='1'; while(scanf("%d",&n)!=EOF){ if(n<3){ printf("%s\n",f[n-1]); continue; } if(max<n) max=n; for(i=last;i<max;i++){ add(f[i-1],f[i-2],f[i],1000); if(f[i][0]=='0') strcpy(f[i],&f[i][1]); } last=max; printf("%s\n",&f[n-1][0]); } return 0; }测试文件:/test.out 结果:答案错误
=======原因======
当参考答案输出:
79665220964720909188841109484886582592430623
-------时---------
你的程序输出:
24204667906615555443036133086749222611890814
=================
测试文件:/sample.out 结果:答案正确
[ 本帖最后由 赤云 于 2015-8-27 17:51 编辑 ]