警示第三个wa,与思路分享
查看原帖
警示第三个wa,与思路分享
1393578
xiaoxiaogui楼主2024/8/27 00:35

两种思路: 第一种要注意特判情况和精度问题

#include<stdio.h>
#include<math.h>
int main()
{
    long long f=1,a=1,b=1,n,v;
    scanf("%lld",&n);
    if(n==0)
    printf("0.00");    
    else if(n==1 || n==2)
    printf("1.00");
    else
    {
        for(int i=3;i<=n;i++)
        {
            v=a+b;
            a=b;
            b=v;
            f=v;
        } 
        printf("%lld.00",f);        
    }
    return 0;
}

第二种用通项公式,具体推法看详解大佬的介绍 也要注意精度问题

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    double f;
    scanf("%d",&n);
    f=(pow((1+sqrt(5))/2.0,n)-pow((1-sqrt(5))/2.0,n));
    f/=sqrt(5);
    printf("%.2lf",f);
    return 0;
}
2024/8/27 00:35
加载中...