1 条题解

  • 1

    先搓一个高精度加减法(迫真)

    
    string sub(string str1,string str2)
    {
        string str;
        int tmp=str1.length()-str2.length();
        int cf=0;
        for(int i=str2.length()-1;i>=0;i--)
        {
            if(str1[tmp+i]<str2[i]+cf)
            {
                str=char(str1[tmp+i]-str2[i]-cf+'0'+10)+str;
                cf=1;
            }
            else
            {
                str=char(str1[tmp+i]-str2[i]-cf+'0')+str;
                cf=0;
            }
        }
        for(int i=tmp-1;i>=0;i--)
        {
            if(str1[i]-cf>='0')
            {
                str=char(str1[i]-cf)+str;
                cf=0;
            }
            else
            {
                str=char(str1[i]-cf+10)+str;
                cf=1;
            }
        }
        str.erase(0,str.find_first_not_of('0'));
        return str;
    }
    string add(string str1,string str2)
    {
        string str;
        int len1=str1.length();
        int len2=str2.length();
        if(len1<len2)
        {
            for(int i=1;i<=len2-len1;i++)
               str1="0"+str1;
        }
        else
        {
            for(int i=1;i<=len1-len2;i++)
               str2="0"+str2;
        }
        len1=str1.length();
        int cf=0;
        int temp;
        for(int i=len1-1;i>=0;i--)
        {
            temp=str1[i]-'0'+str2[i]-'0'+cf;
            cf=temp/10;
            temp%=10;
            str=char(temp+'0')+str;
        }
        if(cf!=0)  str=char(cf+'0')+str;
        return str;
    }
    

    然后搓一个递归,就是斐波那契数列的主干

    string fb(string a)
    {
    	if(a=="1") return "1";
    	if(a=="2") return "2";
    	else return add(fb(sub(a,"1")),fb(sub(a,"2")));
    }
    

    然后先关掉鲨臂的sync,再用主函数

    int main()
    {
    	string a;
    	fucksync();
    	cin>>a;
    	cout<<fb(sub(a,"1"))<<"\n";
    }
    

    信息

    ID
    662
    时间
    1000ms
    内存
    256MiB
    难度
    8
    标签
    递交数
    11
    已通过
    10
    上传者