没有一把过,是__int64的问题(在我的电脑上是__int64_t),其实用long long int 也一样啦。
有个小技巧,遇到这种大数处理,可以先存起来,不必等到输入的时候再计算。
#include <stdio.h>
#include "string.h"
long long int s[51];
int n;
int main() {
memset(s, 0, 51);
s[1]=1;
for(int i=2;i<51;i++){
s[i]=s[i-1]+s[i-2];
}
while (scanf("%d",&n)==1&&n!=-1) {
printf("%lld\n",s[n]);
}
return 0;
}
再贴上我用递归做的,超时代码,警醒世人==
#include <stdio.h>
long long int fb(int n){
if(n==0)
return 0;
if(n==1)
return 1;
else
return fb(n-1)+fb(n-2);
}
int main() {
int n;
while (scanf("%d",&n)==1&&n!=-1) {
printf("%lld\n",fb(n));
}
return 0;
}