九敏!

P1255 数楼梯

2013zhoujy @ 2023-07-26 21:20:39

我发现规律是斐波那契数列,于是做了一个代码:

#include <bits/stdc++.h>

using namespace std;

unsigned long long k=1,t=1,s;
int n;

int main()
{
    cin>>n;
    if(n<2){
        cout<<1;
        return 0;
    }
    for(int i=2;i<=n;i++){
        s=k+t;
        k=t;
        t=s;
    }
    cout<<s;
    return 0;
}

结果提交上去: 1:AC 2:AC 3:AC 4:AC 5:AC 6:AC 7:WA 8:WA 9:WA 10:WA 九九俺! https://www.luogu.com.cn/record/117486981


by ryf_loser @ 2023-07-26 21:23:01

@zhoujiayou 看一下数据范围,要用高精度


by Starry_dream @ 2023-07-26 21:24:10

第一级台阶一种走法,第二级台阶两种走法,而第三级台阶是一二两级之和,以此类推


by Max6700 @ 2023-07-26 21:32:06

同意楼上的楼上,要用高精度加法

void jia(int m)
{
    for(int i=1;i<=len;i++)
        a[m][i]=a[m-1][i]+a[m-2][i];

    for(int i=1;i<=len;i++)
        if(a[m][i]>=10)
        {
            a[m][i+1]+=a[m][i]/10;
            a[m][i]=a[m][i]%10;
            if(a[m][len+1])
                len++;
        }

}

不正规的高精度


by 2013zhoujy @ 2023-07-28 20:36:47

@hjinyb 我就是这样想的啦


by Starry_dream @ 2023-07-29 10:47:35

高精度加法:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string a,b;
    cin>>a>>b;
    int len=a.size(),sz1[600]={0},sz2[600]={0},sz3[600]={0};//len可变化 
    for(int i=0;i<len;i++)
    {
        sz1[len-1-i]=a[i]-'0';/*sz1的最后一位=a的第0位,相当于倒序。
        减'0'一定要记得!*/    
    }   
    len=b.size();
    for(int i=0;i<len;i++)
    {
        sz2[len-1-i]=b[i]-'0';//sz2的最后一位=b的第0位,相当于倒序    
    }
    len=max(a.size(),b.size());
    for(int i=0;i<len;i++)
    {
        sz3[i]=sz3[i]+sz1[i]+sz2[i];//累加
        if(sz3[i]>=10)//进位 
        {
            sz3[i+1]++;
            sz3[i]-=10; 
        }
        sz3[i]%=10; 
    }
    if(sz3[len]>0)//为避免如400+700只输出三位,背下来!! 
    {
        len++;
    }
    for(int i=len-1;i>=0;i--)
    {
        cout<<sz3[i];
    }
    return 0;   
} 

by wangqing111 @ 2023-07-31 21:05:23

高精度的标签被你吃了?? 好吃吗??


|