BigNums—— 斐波那契 预处理(代码)

来源:互联网 发布:美亚保险 淘宝 编辑:程序博客网 时间:2024/06/05 18:19
  1. 通过String数组存储每一个大数
  2. 大数相加:先从小的数开始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--)//从两个数中小的数[F(n-2)]开始,再从**string**数组元素倒退,逐个加法进位    {        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--)//从两个数中大的数[F(n-1)]开始进位    {        temp = (sum[num - 1][i] - '0') + CarryBit;        CarryBit = temp / 10;        sum[num] = char((temp % 10) + '0') + sum[num];    }    if (CarryBit != 0)//两数相加,总数位数最多是大数位数+1    {        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);        //cout <<i << "  "<< sum[i] << endl;    }}
原创粉丝点击