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;
}
HDU 1041
最新推荐文章于 2018-10-05 19:20:00 发布