用c++求斐波那契分数数列的前20项和
时间: 2024-11-13 20:25:52 浏览: 23
第二大数查找
斐波那契数列是一个经典的数列,其中每个数字都是前两个数字之和。但是斐波那契分数(Fibonacci Quotients),并不是通常意义上的斐波那契数列,而是指将每个斐波那契数除以其后续的数得到的分数。在C++中计算这个序列并求和并不直接,因为涉及到无限循环和浮点数精度的问题。
下面是一个简单的例子,展示如何计算前几项斐波那契分数,并截断到前20项(由于实际结果会是非常接近的无理数,我们假设在这里只取整数部分),而不是真正的无穷序列:
```cpp
#include <iostream>
#include <vector>
// 定义斐波那契数列
std::vector<unsigned long long> fibonacci(int n) {
std::vector<unsigned long long> fibs;
if (n <= 0) return fibs; // 长度为0或负数的序列
fibs.push_back(0);
if (n == 1) return fibs; // 只有一个元素的情况
fibs.push_back(1);
for (int i = 2; i < n; ++i) {
fibs.push_back(fibs[i - 1] + fibs[i - 2]);
}
return fibs;
}
// 计算斐波那契分数并截断到前20项
double fibonacci_quotient_sum(int n) {
std::vector<double> fractions;
auto fibs = fibonacci(n + 1); // 加一是因为需要后续的数
for (size_t i = 1; i < fibs.size(); ++i) {
double quotient = static_cast<double>(fibs[i]) / fibs[i + 1];
fractions.push_back(std:: trunc(quotient)); // 截断到整数部分
}
double sum = std::accumulate(fractions.begin(), fractions.end(), 0.0);
return sum;
}
int main() {
int n = 20;
double sum = fibonacci_quotient_sum(n);
std::cout << "前" << n << "项斐波那契分数和为: " << sum << std::endl;
阅读全文