超实用的菲波数

经常看到菲波数的问题,我就把菲波数的数的算法(即大数相加法)记录下来

主要代码:

#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个菲波数记录(要是一一去算会超时的,直接记录用的时候就方便了)

转载于:https://www.cnblogs.com/xinmenghuairi/archive/2012/06/09/2543686.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值