求助!!!为什么n>=9时就不对?

P1255 数楼梯

pengqiushi @ 2022-10-07 12:05:41

代码如下:

#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
    //cout<<sum[1];
    la=lb;
    for(int i=1; i<=lb; i++)
        a[i]=b[i];
    lb=lsum;
    for(int i=1; i<=lsum; i++)
        b[i]=sum[i];
    int c=0;
    //lsum=1;
    for(int i=1; i<=1; i++){
        sum[i]=a[i]+b[i];
        if(sum[i]>=10){
            sum[i+1]++;
            sum[i]-=10;
            if(i==lsum){
                lsum++;
                //break;
            }
        }
    }
}
int main()
{
    int n;
    cin>>n;
    if(n==1||n==2){
        cout<<"1";
        return 0;
    }
    a[1]=1;
    b[1]=1;
    for(int i=1; i<=n; i++)
        cmp();
    /*if(n>=7)
        sum[lsum]++;*/
    for(int i=lsum; i>=1; i--)
        cout<<sum[i];
    return 0;
}

by Wangzj512 @ 2022-10-07 12:22:39

 for(int i=1; i<=1; i++)

cmp() 里面这是什么玩意


by pengqiushi @ 2022-10-07 12:23:32

@Ja50nY0un9 我就是高精度模拟手算的啊


by Ja50nY0un9_as_AgNO3 @ 2022-10-07 12:24:20

@pengqiushi 建议看一下进位的处理捏


by _coastline_ @ 2022-10-07 12:28:21

if(n==1||n==2){
        cout<<"1";
        return 0;
    }

这里n=2时应该是2啊


by _H17_ @ 2022-10-07 12:28:46

@pengqiushi 高精度加法的代码:

string p(string str_a,string str_b){
    char a_digits[1000]={0},b_digits[1000]={0},ans_digits[1000]={0};
    int a_len=0,b_len=0,ans_len=0,k=0;
    a_len=str_a.size();
    b_len=str_b.size();
    for(int i=0;i<a_len;i++)a_digits[i]=str_a[a_len-i-1]-'0';
    for(int i=0;i<b_len;i++)b_digits[i]=str_b[b_len-i-1]-'0';
    ans_len=max(a_len,b_len);
    for(int i=0;i<ans_len;i++)ans_digits[i]=a_digits[i]+b_digits[i]+k,k=ans_digits[i]/10,ans_digits[i]%=10;
    if(k)ans_digits[ans_len++]=k;
    reverse(ans_digits,ans_digits+ans_len);
    for(int i=0;i<=ans_len-1;i++)ans_digits[i]+='0';
    return ans_digits;
}

传入两个 string 传出的也是 string


by Wangzj512 @ 2022-10-07 12:30:35

还有,n=2时答案应为2(跨两级台阶或者两次一阶)


by _coastline_ @ 2022-10-07 12:35:20

a[1]=1;
    b[1]=1;

b[1]=2才对


by pengqiushi @ 2022-10-07 12:54:28

#include<iostream>
using namespace std;
int a[105],la=1,b[105],lb=1,sum[105],lsum=1;
void cmp()
{
    //cout<<sum[1];
    la=lb;
    for(int i=1; i<=lb; i++)
        a[i]=b[i];
    lb=lsum;
    for(int i=1; i<=lsum; i++)
        b[i]=sum[i];
    int c=0;
    //lsum=1;
    for(int i=1; i<=lsum; i++){
        sum[i]=a[i]+b[i];
        if(sum[i]>=10){
            sum[i+1]++;
            sum[i]-=10;
            if(i==lsum){
                lsum++;
                //break;
            }
        }
    }
}
int main()
{
    int n;
    cin>>n;
    if(n==1||n==2){
        cout<<n;
        return 0;
    }
    a[1]=1;
    b[1]=2;
    for(int i=3; i<=n; i++)
        cmp();
    for(int i=lsum; i>=1; i--)
        cout<<sum[i];
    return 0;
}

by hema5177 @ 2022-10-07 12:54:34

@xujiabin194 没想到你竟然在线?


by pengqiushi @ 2022-10-07 12:54:58

改了,还是不行


| 下一页