華為OJ(遞推公式)


描述

已知一個遞推公式A[N+1] = A[N] * 2 + 2,且A[1] = 2,求A[N]的值
 

詳細描述:

接口說明
原型:

voidCalculateAN(unsigned n, char *pOutRes)

輸入參數:

unsigned n 題目描述中的N

輸出參數:

char *pOutRes A[N]的值。因為當n較大時,A[N]的值會很大,因此結果用一個字符串表示。該字符串的內存空間由調用者保證,內存大小足夠長。

返回值:

void

限制:

0< n <65535

舉例:

A[1] = 2, A[5] = 62, A[8] = 510

 

知識點 字符串,指針
題目來源 內部整理
練習階段 初級
運行時間限制 10Sec
內存限制 128MByte
輸入

輸入一個整數

輸出

輸出得到的值

樣例輸入 1
樣例輸出 2
主要是遞歸調用,剛好想起來之前有個超長整形加法的題目,也即兩個字符串相加。直接遞歸調用即可。

#include<iostream>
#include<string>
using namespace std;
string add(string s1,string s2)  
{  
    string s3;  
    int len_short,len_long;  
    if(s1.size()>s2.size())  
    {  
        len_short=s2.size();  
        len_long=s1.size();  
        s3=s1;  
    }  
    else  
    {  
        len_short=s1.size();  
        len_long=s2.size();  
        s3=s2;  
    }  
    int flag=0;  
    int tmp;  
    for(int i=1;i<=len_short;i++)  
    {  
        tmp=s1[s1.size()-i]-'0'+s2[s2.size()-i]-'0'+flag;  
        if(tmp>9)  
        {  
            s3[s3.size()-i]=tmp-10+'0';  
            flag=1;  
        }  
        else  
        {  
            s3[s3.size()-i]=tmp+'0';  
            flag=0;  
        }  
    }  
      
    for(int i=0;i<s3.size()-len_short;i++)  
    {  
        tmp=s3[i]-'0'+flag;  
        if(tmp>9)  
        {  
            s3[i]=tmp-10+'0';  
            flag=1;  
        }  
        else  
            flag=0;  
    }  
    if(flag==1)  
        s3="1"+s3;  
    return s3;  
}  
string CalculateAN(unsigned int n)
{
	if(n==1)
		return "2";
	string s=add(CalculateAN(n-1),"1");
	return add(s,s);
}
int main()
{
	int n;
	cin>>n;
	cout<<CalculateAN(n);
	//system("pause");
	return 0;
}



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



遞推、錯排公式 遞推公式小結 用矩陣表示數列遞推公式 九度OJ 1089 遞推數列 華為OJ之放蘋果 華為OJ(DNA序列) 華為OJ之正數相減 華為OJ——參數解析 華為OJ:素數對個數 【華為OJ】逆波蘭
 
粤ICP备14056181号  © 2014-2020 ITdaan.com