题目意思:把输入的三个数字作为 数列前三个元素 然后计算第九十九个元素的值
用java当然很快,但是为了锻炼自己的能力就用C语言写吧
这里我用了滚动数组,<span style="font-family: Arial, Helvetica, sans-serif;">就减少了空间的消耗量</span>
然后就是大数大基本运算了
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int a[3][150];
char temp[3][10];
int main()
{
while(scanf("%s%s%s",temp[0],temp[1],temp[2])!=EOF)
{
memset(a,0,sizeof(a));
int n=3;
int maxlen=0;
while(n--)
{
int len=strlen(temp[n]);
reverse(temp[n],temp[n]+len);
maxlen=maxlen>len?maxlen:len;
for(int i=0;i<len;i++)
a[n][i]=temp[n][i]-'0';
}
int i;
for(i=3;i<=99;i++){
for(int j=0;j<maxlen;j++)
a[i%3][j]=a[(i-1)%3][j]+a[i%3][j]+a[(i+1)%3][j];
maxlen++;
for(int j=0;j<maxlen;j++){
a[i%3][j+1]+=a[i%3][j]/10;
a[i%3][j]%=10;
}
}
i=(i-1)%3;
int temp=1;
for(int j=maxlen;j>=0;j--){
if(a[i][j]==0&&temp)
continue;
printf("%d",a[i][j]);
temp=0;
}
if(temp)
printf("0");
puts("");
}
return 0;
}