#include<iostream>
#include<string>
using namespace std;
string add(string s1,string s2)
{
int j,l,la,lb;
string max,min;
max=s1;
min=s2;
if(s1.length()<s2.length())
{
max=s2;
min=s1;
}
la=max.size();//计算字符串长度
lb=min.size();
l=la-1;
for(j=lb-1; j>=0; j--,l--)
max[l] += min[j]-'0'; //每一位相加,用到加法运算符,全部按照asiic码表来,就会多加一次48,所以要减去ascii值为48的‘0’
for(j=la-1; j>=1; j--)
if(max[j]>'9')//若相加超过9,进位
{
max[j]-=10;
max[j-1]++;
}
if(max[0]>'9')//首位大于9,再加一个数
{
max[0]-=10;
max='1'+max;
}
return max;
}
int main()
{
int n,i;
string a[1001];
a[0]="1";
a[1]="1";
a[2]="2";
a[3]="4";
for(i=4; i<1001; ++i)
a[i]=add(add(a[i-1],a[i-2]),a[i-4]);
while(cin>>n)
cout<<a[n]<<endl;
return 0;
}
学习心得:
找的第二个解决大数问题的方法,已经get√