Penelope's Blog 2022-03-04 21:26 采纳率: 100%
浏览 112
已结题

想要解决斐波拉契数列输出数据过大问题

第3关:兔子问题

题目描述:

求解Fibonacci数列的第110项、第200项的值。

测试输入: 110

预期输出: 26925748508234281076009

提示:
注意溢出及大数问题
第一项为 0 ,第二项为1

求解思路是 直接使用递归 ,但是数字过大会直接溢出
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int Fibonacci(int n); 
int main()
{
    int n;
    int f;
    scanf("%d",&n);
    f = Fibonacci(n);
    printf("%d",f);
 return 0;
}

int Fibonacci(int n) {
    if(n == 1) 
    {
        return 0;
    }
    else if (n == 2) 
    {
        return 1;
    } 
    else {
        return Fibonacci(n-1)+Fibonacci(n-2);
    }

}


找到了运行成功的代码,但是实在看不太懂,求问有没有人够解释一下

#include<stdio.h>
#define F1 300
#define F2 1000
int main()
{
    //设置二维数组 
    int F[F1][F2]={0};
    int k;
    //输入较大值 
    scanf("%d",&k); 
    F[0][F2-1]=0;//第0行第299个为0 
    F[1][F2-1]=1;//第1行第299个为1 
    for(int d=2;d<k;d++) //需要相加的个数 
    {
        for(int i=F2-1;i>=0;i--)
           {
              F[d][i]=F[d-1][i]+F[d-2][i];
//              printf("%d\n",F[d][i]);
            }
            
        int r=F2-1;
    //将其一个一个放入数组? 
        while(r>=0){
            if(F[d][r]>=10)
            {
                F[d][r-1]+=1;
                F[d][r]=F[d][r]-10;
            }
            r--;
            }
    }
    
    for(int i = 0; i <= F1; i++){
        for(int j = 0; j <= F2; j++) {
            printf("%d ",F[i][j]);
        }
        printf("\n");
    }
    
    int j=0;
    while(j<F2)
    {
        if(F[k-1][j]!=0)
        {
            while(j<F2)
            {
                printf("%d",F[k-1][j]);
                j++;
            }
        }
        j++;
    
    }
     return 0;
}

原文链接:https://blog.csdn.net/xingcheng12345/article/details/115910547?ops_request_misc=&request_id=&biz_id=102&utm_term=%E7%AC%AC3%E5%85%B3%EF%BC%9A%E5%85%94%E5%AD%90%E9%97%AE%E9%A2%98%20%E6%B1%82%E8%A7%A3Fibonacci%E6%95%B0%E5%88%97%E7%9A%84%E7%AC%AC110%E9%A1%B9%E3%80%81%E7%AC%AC&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-115910547.pc_search_result_control_group&spm=1018.2226.3001.4187

  • 写回答

2条回答 默认 最新

  • 关注

    他写了个数组,用来模拟整数
    数组中的每一个元素代表了长整数中的某一位,比如数组第一项代表长整数的个位,第二项代表十位等
    如果数组中的某一位超过10,则将其-10并进位到数组的下一项
    计算完毕后输出数组中每个元素,合起来就是一个长整数

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 3月4日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度