救救孩子吧……我太菜了

P1255 数楼梯

kIG7Z8oP @ 2019-10-30 20:38:13

一个点WA了,还有一个R了,不让下数据嘤嘤

#include<cstdio>
int n;
void swap(int &a,int &b)
{
    int t=a;
    a=b,b=t;
}
struct hg_int
{
    int len,val[3000];
    void init()
    {
        len=0;
    }
    void turn()
    {
        for(int i=0,j=len-1;i<j;i++,j--)
            swap(val[i],val[j]);
    }
    void operator = (int tmp)
    {
        while(tmp) val[len++]=tmp%10,tmp/=10;
    }
    void operator = (hg_int tmp)
    {
        len=tmp.len;
        for(int i=0;i<len;i++)
            val[i]=tmp.val[i];
    }
    hg_int operator + (hg_int tmp)
    {
        int lenmx=len;
        if(tmp.len>len) lenmx=tmp.len;
        for(int i=0;i<lenmx;i++)
            tmp.val[i]+=val[i];
        for(int i=0;i<lenmx;i++)
            tmp.val[i+1]+=tmp.val[i]/10,tmp.val[i]%=10;
        if(tmp.val[lenmx]) lenmx++;
        tmp.len=lenmx;
        return tmp;
    }
    void otp()
    {
        for(int i=len-1;i>=0;i--)
            putchar(val[i]+48);
    }
}a[2501];
int main()
{
    scanf("%d",&n);
    a[0]=1;
    a[1]=1;
    for(int i=2;i<=n;i++)
        a[i].init();
    for(int i=2;i<=n;i++)
        a[i]=a[i-1]+a[i-2];
    a[n].otp();
}

by kIG7Z8oP @ 2019-10-30 20:40:37

救命~


by Yo_haor @ 2019-11-21 12:58:28

看得不是太懂,但我过了,可能有点麻烦,若有优化方法,请指出qwq

(解释在代码里qwq)

上代码:

#include<iostream>
using namespace std;//学学dalao一个文件头
int n;
string f[5010];//定义字符串数组
string jia(string x,string y){//高精度加法
    string t="";//等会返回的值
    if(x.size()>y.size())//设置好前导0
        for(int i=1;i<=x.size()-y.size();i++)y='0'+y;
    if(x.size()<y.size())//设置好前导0
        for(int i=1;i<=y.size()-x.size();i++)x='0'+x;
    int jw=0,a,b,c;
    for(int i=x.size()-1;i>=0;i--){//进行加法
        a=int(x[i]-48),b=int(y[i]-48),c=a+b+jw;
        if(c>9)jw=1;//判读是否进位
        else jw=0;
        c=c%10;//求出当前为数的值
        t=char(c+48)+t;//进行累加
    }
    if(jw==1)t='1'+t;//切记切记不要忘记,结尾可能还是进位qwq
    return t;
}
int main(){
    cin>>n;
    f[0]='0',f[1]='1',f[2]='2';//记得初始化,切记切记不要忘了0(我被坑过┬_┬)
    for(int i=3;i<=n;i++)
        f[i]=jia(f[i-1],f[i-2]);//一步步递推
    cout<<f[n];//输出结果f[n]
    return 0;
}

希望对你有帮助


|