mezWindows @ 2020-12-19 21:12:44
#include<iostream>
#include<cstring>
using namespace std;
int a[5800],b[5800],c[5800];
int main(){
int n,la,lb,lc;
cin>>n;
a[0]=1;
la=1;
b[0]=2;
lb=1;
for(int i=3;i<=n;i++){
lc=lb;
for(int j=0;j<lc;j++){
c[j]=a[j]+b[j];
}
for(int j=0;j<lc;j++){
c[j+1]=c[j+1]+c[j]/10;
c[j]%=10;
}
if(c[lc]>0)lc++;
la=lb;
lb=lc;
memcpy(a,b,5000*sizeof(int));
memcpy(b,c,5000*sizeof(int));
}
for(int i=lc-1;i>=0;i--){
cout<<c[i];
}
return 0;
}
by 原来是 @ 2020-12-24 18:27:27
我用c写的,你可以参考一下,用的数组模拟加法
#include <stdio.h>
int a[100000]={1,0},b[100000]={0,},c[100000];
int i,n=1,j,flat,k;
int main()
{
scanf("%d",&k);
for(j=1;j<=k;j++){
/*c=a+b*/
/*一开始是一位所以n赋了1*/
for(i=0,flat=0;i<n;i++){
c[i]=a[i]+b[i]+flat;
flat=0;/*每次加完把flat归零*/
/*如果最高位大于10进一位*/
if(c[n-1]>=10){
n++;
}
flat=c[i]/10;
c[i]=c[i]%10;
}
/*斐波那契数列的正常操作*/
/*b=a*/
for(i=0;i<n;i++){
b[i]=a[i];
}
/*a=c*/
for(i=0;i<n;i++){
a[i]=c[i];
}
}
/*把结果逆序输出出来*/
for(i=n-1;i>=0;i--){
printf("%d",c[i]);
}
printf("\n");
return 0;
/*哈哈哈哈哈第一次写题解,太草率了哈哈哈*/
}
by mezWindows @ 2020-12-25 23:00:58
谢谢,大佬