[DSC1002] 斐波那契中的高精度

阅读这篇文章大概需要 10 分钟,DSC1002 题目传送门:http://disscode.com/problem/DSC1002[1]

题目描述

DSC1002 题目

代码实验

“老生常谈的斐波那契数列有什么可讲的?”

然后打开 DSC1002 开始编写代码,最后获得了一个 Wrong Answer

为什么要有这道题,为什么 LINE 会考察这道题,其实原因就在这里。首先我们来看斐波那契数的特点,我都知道斐波那契数列的递推公式:

所以我们打印出前 50 项斐波那契数:

#include <cstdio>
#include <string>
using namespace std;

const int maxn = 105;
int dp[maxn];

int main() {
    memset(dp, 0, sizeof(dp));
    dp[0] = 0;
    dp[1] = 1;
    for (int i = 2; i <= 50; ++ i) {
        dp[i] = dp[i - 1] 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
斐波那契数列是一个数列,其每个数字都是前两个数字的和。通常,斐波那契数列的前两个数字是0和1。 如果要计算斐波那契数列的第n个数字(n从0开始),可以使用高精度来处理,以避免溢出或精度丢失。以下是一个使用高精度计算斐波那契数列的示例代码: ```cpp #include <iostream> #include <vector> // 高精度 std::vector<int> add(const std::vector<int>& num1, const std::vector<int>& num2) { std::vector<int> result; int carry = 0; int i = num1.size() - 1; int j = num2.size() - 1; while (i >= 0 || j >= 0 || carry > 0) { int sum = carry; if (i >= 0) { sum += num1[i]; i--; } if (j >= 0) { sum += num2[j]; j--; } result.insert(result.begin(), sum % 10); carry = sum / 10; } return result; } // 计算斐波那契数列的第n个数字(高精度) std::vector<int> fibonacci(int n) { std::vector<int> fibPrev{0}; std::vector<int> fibCurr{1}; for (int i = 2; i <= n; i++) { std::vector<int> fibNext = add(fibPrev, fibCurr); fibPrev = fibCurr; fibCurr = fibNext; } return fibCurr; } int main() { int n = 100; // 计算斐波那契数列的第100个数字 std::vector<int> result = fibonacci(n); std::cout << "Fibonacci number at position " << n << ": "; for (int digit : result) { std::cout << digit; } std::cout << std::endl; return 0; } ``` 在上述示例,我们定义了一个 `add` 函数来实现高精度的加。然后,我们使用 `fibonacci` 函数来计算斐波那契数列的第n个数字。通过使用高精度的加来计算每个数字,我们可以避免溢出或精度丢失。 请注意,随着n的增加,计算斐波那契数列的高精度解决方案会变得更加耗时和占用内存。因此,在实际应用,需要根据具体需求权衡使用高精度的必要性和性能要求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值