经常看到菲波数的问题,我就把菲波数的数的算法(即大数相加法)记录下来
主要代码:
#include <string>
#define N 500 //最大的菲波数个数(可自己设置)
using namespace std;
string *A = new string[N];
string Sum_calc(string s1,string s2) //大数相加法
{
int length;
if (s1.length()>=s2.length())
{
length=s1.length();
string tmp(s1.length()-s2.length(),'0');
s2=tmp+s2;
}
else
{
length=s2.length();
string tmp(s2.length()-s1.length(),'0');
s1=tmp+s1;
}
string sum(length,'0');
int carry = 0; //carry
for (int k=length-1;k!=-1;--k)
{
sum[k]=(s1[k]+s2[k]+carry-96)%10+48;
carry=(s1[k]+s2[k]+carry-96>9);
}
if (carry)
sum='1'+sum;
return sum;
}
int main()
{
string *A = new string[N]; // 定义菲波数数组
A[1]='1';
A[2]='2'; //首两位位的初始值
for (int i=3; i<N; ++i)
{
A[i] = Sum_calc(A[i-2], A[i-1]);
} //将想要的N个菲波数记录(要是一一去算会超时的,直接记录用的时候就方便了)