这有只蒟蒻呢_ @ 2021-02-19 10:18:31
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long a[10000]
long long f(int n)
{
if(a[n]>0)return a[n];
if(n==1)return 1;
if(n==2)return 2;
return a[n]=f(n-1)+f(n-2);
}
int main()
{
long long n;
cin>>n;
cout<<f(n);
return 0;
}
by _caiji_ @ 2021-02-19 10:19:18
高精度,请。
by ud2_ @ 2021-02-19 10:47:13
@这有只蒟蒻呢_ 你是怎么做到编译错误拿 40 分的(
by 这有只蒟蒻呢_ @ 2021-02-20 09:03:32
@caijianhong 我不会高精度, 我只会高精加
by 这有只蒟蒻呢_ @ 2021-02-20 10:03:43
我改了改程序,现在是50分了
by 这有只蒟蒻呢_ @ 2021-02-20 10:04:06
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long a[10000];
long long f(int n)
{
if(a[n]>0)return a[n];
if(n==1)return 1;
if(n==2)return 2;
return a[n]=f(n-1)+f(n-2);
}
int main()
{
long long n;
cin>>n;
cout<<f(n);
return 0;
}
by Zhetengtiao @ 2021-02-21 09:36:22
unsigned long long也能得60分
况且这题得用高精,不然会炸掉
by LitApple02 @ 2021-02-22 21:37:54
你可以试试下载测试点2的数据就知道了,输入5000的时候结果有1045位(不信你数数),不用高精肯定炸。
by 奋斗吧!少女 @ 2021-02-23 10:30:25
用一下高精度
#include<bits/stdc++.h>
using namespace std;
int len=1,n,f[5010][5010];
void hp(int k){
int i;
for(i=1;i<=len;i++)
f[k][i]=f[k-1][i]+f[k-2][i];
for(i=1;i<=len;i++)
if(f[k][i]>=10){
f[k][i+1]+=f[k][i]/10;
f[k][i]=f[k][i]%10;
if(f[k][len+1])len++;
}
}
int main(){
int i;
scanf("%d",&n);
f[1][1]=1;f[2][1]=2;
for(i=3;i<=n;i++)
hp(i);
for(i=len;i>=1;i--)
printf("%d",f[n][i]);
return 0;
}
by 这有只蒟蒻呢_ @ 2021-08-16 09:00:31
@Zhetengtiao 你好,tiaotiao!