救命!!!#6 #7 测试点WA!!!

P1255 数楼梯

mezWindows @ 2020-12-19 21:12:44

#include<iostream>
#include<cstring> 
using namespace std;
int a[5800],b[5800],c[5800];
int main(){
    int n,la,lb,lc;
    cin>>n;
    a[0]=1;
    la=1;
    b[0]=2;
    lb=1;
    for(int i=3;i<=n;i++){
        lc=lb;
        for(int j=0;j<lc;j++){
            c[j]=a[j]+b[j];
        }
        for(int j=0;j<lc;j++){
            c[j+1]=c[j+1]+c[j]/10;
            c[j]%=10;
        }
        if(c[lc]>0)lc++;
        la=lb;
        lb=lc;
        memcpy(a,b,5000*sizeof(int));
        memcpy(b,c,5000*sizeof(int));
    }
    for(int i=lc-1;i>=0;i--){
        cout<<c[i];
    }
    return 0;
}

by 原来是 @ 2020-12-24 18:27:27

我用c写的,你可以参考一下,用的数组模拟加法

#include <stdio.h>
int a[100000]={1,0},b[100000]={0,},c[100000];
int i,n=1,j,flat,k;
int main()
{
    scanf("%d",&k);
    for(j=1;j<=k;j++){
        /*c=a+b*/
        /*一开始是一位所以n赋了1*/
        for(i=0,flat=0;i<n;i++){
            c[i]=a[i]+b[i]+flat;
            flat=0;/*每次加完把flat归零*/
            /*如果最高位大于10进一位*/
            if(c[n-1]>=10){
                n++;
            }
            flat=c[i]/10;
            c[i]=c[i]%10;
        } 
        /*斐波那契数列的正常操作*/
        /*b=a*/
        for(i=0;i<n;i++){
            b[i]=a[i];
        }
        /*a=c*/
        for(i=0;i<n;i++){
            a[i]=c[i];
        }

    }
    /*把结果逆序输出出来*/
    for(i=n-1;i>=0;i--){
        printf("%d",c[i]);
    }
    printf("\n");
    return 0;
    /*哈哈哈哈哈第一次写题解,太草率了哈哈哈*/
}

by mezWindows @ 2020-12-25 23:00:58

谢谢,大佬


|