- 通过String数组存储每一个大数
- 大数相加:先从小的数开始a+b+进位,再保存进位数,再赋值;再从大的数继续b+进位,再赋值;最后判断是否需要再往前进位;(或者可以先a+b,再进位,再赋值)
#include<stdio.h>
#include <string>
#include <iostream>
using namespace std;
const int MAXFIB = 1001;
string sum[MAXFIB];
void Add(int num)
{
int i;
int LengthOfTow = sum[num - 1].length() - sum[num - 2].length();
int temp;
short CarryBit = 0;
for (i = sum[num - 2].length() - 1; i >= 0; i--)
{
temp = (sum[num - 2][i] - '0') + (sum[num - 1][i + LengthOfTow] - '0') + CarryBit;
CarryBit = temp / 10;
sum[num] = char((temp % 10) + '0') + sum[num];
}
for (i = i + LengthOfTow; i >= 0; i--)
{
temp = (sum[num - 1][i] - '0') + CarryBit;
CarryBit = temp / 10;
sum[num] = char((temp % 10) + '0') + sum[num];
}
if (CarryBit != 0)
{
sum[num] = char(CarryBit + '0') + sum[num];
}
}
void PreFibonacci()
{
sum[0] = "1";
sum[1] = "1";
int i;
for (i = 2; i < MAXFIB; i++)
{
Add(i);
}
}