#include <stdio.h>
int a[2500]={1},b[2500]={2},c[2500];
void fun(int *p1,int *p2,int *p3){
int flag=0,t;
for(int i=0;i<2500;i++){
if(flag==0){
*(p3+i)=(*(p1+i)+*(p2+i))%10;
flag=(*(p1+i)+*(p2+i))/10;
}else {
*(p3+i)=(*(p1+i)+*(p2+i)+flag)%10;
flag=((*(p1+i)+*(p2+i))+flag)/10;
}
}
return ;
}
int main(){
int n;
scanf("%d",&n);
if(n==0){printf("0");return 0;}
if(n==1){printf("1");return 0;}
if(n==2){printf("2");return 0;}
int *p1=NULL,*p2=NULL,*p3=NULL;
for(int i=3;i<=n;i++){
if(i%3==0){p1=&a[0];p2=&b[0];p3=&c[0];}
if(i%3==1){p1=&b[0];p2=&c[0];p3=&a[0];}
if(i%3==2){p1=&c[0];p2=&a[0];p3=&b[0];}
fun(p1,p2,p3);
}
int f=0;
for(int i=2499;i>=0;i--){
if(*(p3+i)==0&&f==0)continue;
else{
f=1;
printf("%d",*(p3+i));
}
}
return 0;
}
高精度+指针解决fib数列(递推)洛谷P1255
最新推荐文章于 2024-07-25 21:13:04 发布