2 条题解

  • 0
    @ 2023-9-26 22:47:23
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <stack>
    #include <string>
    #include <math.h>
    using namespace std;
    //vector:存放结果
    //stack:  计算过程
    int main(){
        int n;
        vector <string> haha;
        char ai[1050],bi[1050];
        stack <char> a,b,fin;
        ai[0]='1';ai[1]='\0';bi[0]='1';bi[1]='\0';
        haha.push_back(ai);
        haha.push_back(bi);//存入一二两位
        int ci, len=0;//ci为进位标志,len为实时记录每轮运算结果的长度,超过1000跳出循环
        int i;
        char ch,aa,bb;//ch记录每一位运算结果,aa,bb记录参与每位运算的数
        while(len<=1000){
            i=0;
            len=0;
            ci=0;
            while(ai[i]!='\0'){
                a.push(ai[i]);
                i++;
            }//入栈
     
            i=0;
            while(bi[i]!='\0'){
                b.push(bi[i]);
                i++;
            }//入栈
            while(!a.empty()&&!b.empty()){
                aa=a.top();a.pop();
                bb=b.top();b.pop();
                ch=(char)('0'+(ci+(int)((aa-'0')+(bb-'0')))%10);
                ci=(ci+(int)((aa-'0')+(bb-'0')))/10;
                fin.push(ch);
                len++;
            }//逐位加法运算
            if(a.empty()&&!b.empty()){
                    while(!b.empty()){
                        bb=b.top();
                        b.pop();
                        fin.push((char)('0'+(ci+(int)(bb-'0'))%10));
                        len++;
                        ci=(ci+(bb-'0'))/10;
                    }
            }//由于两个数可能不等长,长的那一部分高位必须继续进行加法运算
            if(ci>0){
                fin.push((char)('0'+ci));
                len++;
            }//算到最后一位还有可能有进位
     
            if(len>1000){
                break;
            }//超过一千位,结果超过限制,跳出循环
     
            i=0;
            while(bi[i]!='\0'){
                ai[i]=bi[i];
                i++;
            }
            ai[i]='\0';
            
            i=0;
            while(!fin.empty()){
                bi[i]=fin.top();
                fin.pop();
                i++;
            }
            bi[i]='\0';
            
            haha.push_back(bi);//计算结果压入数组
       }
       
        while(cin>>n){
            if(n<=0){
                break;
            }
            cout<<haha.at(n-1)<<endl;
        }
        haha.clear();
     
        return 0;
    }
    
  • 0
    @ 2022-10-2 11:54:07
    #include<bits/stdc++.h>
    //抄的是sz
    using namespace std;
    string a,b,s[100005];
    int t,n,x[10005],y[10005];
    string gjd(string a,string b)
    {
    	string ans="";
    	t=0;
    	memset(x,0,sizeof(x));	
    	memset(y,0,sizeof(y));
    	if(a.size()<b.size()) swap(a,b);
    	for(int i=a.size()-1,j=0;i>=0;i--,j++)
    	{
    		x[j]=a[i]-'0';
    	}
    	for(int i=b.size()-1,j=0;i>=0;i--,j++)
    	{
    		y[j]=b[i]-'0';
    	}
    	for(int i=0;i<a.size();i++)
    	{
    		x[i]=x[i]+y[i];
    	}
    	for(int i=0;i<a.size();i++)
    	{
    		if(x[i]>=10)
    		{
    			x[i+1]++;
    			x[i]-=10;
    			if(i==a.size()-1) t++; 
    		}
    	}
    	if(t==1) ans+='1';
    	for(int i=a.size()-1;i>=0;i--)
    	{
    		ans+=char(x[i]+'0');
    	}
    	return ans;
    }
    int main()
    {
    	while(cin>>n)
    	{
    		s[1]='1';
    		s[2]='1';
    		if(s[n]!="") cout<<s[n]<<endl;
    		else
    		{
    			for(int i=3;i<=n;i++)
    			{
    				s[i]=gjd(s[i-1],s[i-2]);
    			}
    			cout<<s[n]<<endl;
    		}
    	}
    	return 0;
    }
    
    • 1

    信息

    ID
    1185
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    161
    已通过
    48
    上传者