问题标题: 酷町堂:5502 求大佬解答

0
0
已解决
汤启恩
汤启恩
新手光能
新手光能

#include<bits/stdc++.h>
using namespace std;
string Fib[101];
int x,y,n;
int a[10005],b[10005],c[10005];
string Plus(string x,string y,int x1,int y1){
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    a[0]=x.size(),b[0]=y.size();
    int jww=0;
    for(int i=1;i<=a[0];i++){
        a[i]+=x[a[0]-i]-'0';
        a[i]*=x1;
        a[i]+=jww;
        jww=a[i]/10;
        a[i]%=10;
    }
    if(jww!=0){
        a[++a[0]]+=jww;
    }
    for(int i=1;i<=b[0];i++){
        b[i]+=y[b[0]-i]-'0';
        b[i]*=y1;
        jww=b[i]/10;
        b[i]%=10;
    }
    if(jww!=0){
        b[++b[0]]+=jww;
    }
    c[0]=max(a[0],b[0]);
    int jw=0;
    for(int i=1;i<=c[0];i++){
        c[i]=a[i]+b[i]+jw;
        jw=c[i]/10;
        c[i]%=10;
    }
    if(jw==1)
    c[++c[0]]++;
    string ans="";
    for(int i=c[0];i>=1;i--){
        ans=ans+(char)(c[i]+'0');
    }
    return ans;

int main(){
    cin>>x>>y>>n;
    Fib[1]="1";
    Fib[2]="1";
    for(int i=3;i<=n;i++){
        Fib[i]=Plus(Fib[i-1],Fib[i-2],x,y); 
    }
    cout<<Fib[n];
    return 0; 
}

汤启恩在2020-10-11 14:17:48追加了内容

样例都没过

汤启恩在2020-10-11 20:16:48追加了内容

ding

汤启恩在2020-10-11 20:29:58追加了内容

ding

汤启恩在2020-10-11 20:48:08追加了内容

ding


0
已采纳
蔡乐毅
蔡乐毅
高级光能
高级光能

分两步算,贪心不足蛇吞象

int jw=0;

for(int i=1;i<=a[0];i++){

for(int j=1;j<=b[0];j++){

c[i+j-1]+=a[i]*b[j];

}

}

for(int i=1;i<=c[0];i++){

c[i]+=jw;

jw=c[i]/10;

c[i]%=10;

}

if(jw){

c[0]++;

c[c[0]]=jw;

}

string tmp="";

for(int i=c[0];i>=1;i--){

tmp+=c[i]+'0';

}

乘法如上

int jw=0;

for(int i=1;i<=c[0];i++){

c[i]=jw+a[i]+b[i];

jw=c[i]/10;

c[i]%=10;

}

if(jw){

c[0]++;

c[c[0]]=jw;

}

string tmp="";

for(int i=c[0];i>=1;i--){

tmp+=c[i]+'0';

}

加法如上

 

0
0
我要回答