答案错误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 编辑 ]






