HDU 1041

HDU 1041 是一道大数题。这里遇到的两个问题分别是大数相加和如何找规律

#include<iostream>
#include<string>//注意:这里是string,不是cstring!!cstring,是兼容C的头文件.里面的函数是基于C或者说C风格的字符串处理函数或定义或宏string是C++标准库函数.提供在std名字空间中的C++字符串处理类string

using namespace std;


string add(string s1, string s2)//大数加法 s1+s2 
{
	int Len1 = s1.length();
	int Len2 = s2.length();	
	int carry = 0, sum = 0;	
	
	
	if(Len1 < Len2)
	{
		string sTemp = s1;
		         s1  = s2;
	           	 s2  = sTemp;
    }
    
 for(int i = Len1 - 1, j = Len2 - 1; i >= 0 ; i--, j--)
	{
	    sum = s1[i] - '0' + carry + ( j >= 0 ? s2[j] - '0': 0 ) ;    //s2肯定是比s1短的,所以这里需要注意s1[j]的的处理
		s1[i] = sum % 10 + '0';
		carry = sum / 10;
	}
	if( carry != 0 )	
	    return s1.insert(0, "1" );	


    return s1;


}


int main()
{
	int N;                                                   //0<N<=1000,所以N会非常的大 
	string B[1005];
	B[1] = "0"; B[2]= "1"; B[3]= "1"; B[4] = "3"; B[5] = "5"; B[6] = "11"; 
	
	for(int n = 7; n <= 1004; n++)                           //如果将此代码放入while循环中,将超时 
	         B[n] = add(B[n-1],add(B[n-2],B[n-2]));
	         
     while(cin >> N)		
	    cout << B[N] << endl; 
	    		
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值