求前n项和(C++)

题目描述
求1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/34……的前n项的和。

输入格式
第1行:一个整数n( 1≤n≤30)。

输出格式
一行:一个小数,即前n项之和(保留3位小数)。

img

分子和分母都是斐波那契数列,逐项循环交换

#include <iostream>
using namespace std;
#include <iomanip>
int main()
{
    int n;
    cin>>n;
    int fz = 1,fm = 1,t;
    double r = 0;
    for(int i=1;i<=n;i++)
    {
        r += fz*1.0/fm;
        t = fz;
        fz = fm;
        fm += t;
    }
    cout<<setiosflags(ios::fixed)<<setprecision(3)<<r;
}

运行结果:

img

代码:

#include <iostream>
#include <iomanip>
using namespace std;


int main()
{
    int n;
    double a = 1, b = 1;// a是分子,b是分母
    double sum = 0;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        sum += a / b;
        int t = a + b;
        a = b;
        b = t;
    }
    cout << fixed << setprecision(3) << sum;
    return 0;
}




从这里面看到了斐波那契数列,计算代码如下:

#include <stdio.h>

double fibonacci_sum(int n) {
    if (n <= 0) {
        return 0;
    }

    double fib_sum = 0;
    double fib_prev = 1;
    double fib_curr = 1;

    for (int i = 0; i < n; i++) {
        //if (i > 0) printf("+");
        //printf("%.0f/%.0f", fib_prev, fib_curr);
        fib_sum += fib_prev / fib_curr;
        double fib_next = fib_prev + fib_curr;
        fib_prev = fib_curr;
        fib_curr = fib_next;
    }
    //printf("=");

    return fib_sum;
}

int main() {
    int n;
    printf("请输入n的值:");
    scanf("%d", &n);

    double result = fibonacci_sum(n);
    printf("%.3lf\n", result);

    return 0;
}

以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:

思路:利用循环计算每一项的值,然后累加求和。

代码:

#include <iostream>
#include <iomanip> //用于输出保留小数位数

using namespace std;

int main()
{
    int n;
    cin >> n;

    double sum = 0; //记录累加和
    double a = 1, b = 1; //记录分子和分母的值

    for (int i = 1; i <= n; i++)
    {
        sum += a / b; //累加当前项
        double tmp = a;
        a = b; //更新分子和分母的值
        b = tmp + b;
    }

    cout << fixed << setprecision(3) << sum << endl; //保留3位小数输出

    return 0;
}

例子:

输入:

5

输出:

6.320
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7623641
  • 这篇博客你也可以参考下:C++求1+1/3 +1/5+…的前n 项之和
  • 除此之外, 这篇博客: c++ 分子求和:1+1/2+1/3+…1/N结果为最简分数中的 分子求和:1+1/2+1/3+…1/N结果为最简分数## 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 通分求值

    #include<bits/stdc++.h>
    using namespace std;
    int gcd(int m,int n){
    	return m%n==0?n:gcd(n,m%n);
    }
    
    int main()
    {
     int n,i,fz=1,fm=1;
     int a=0,b=0;
     int g=0;
     cin>>n;
     for (int i=2;i<=n; i++)
     {
      a=fm*i;//new fm
      b=fz*i+1*fm;//new fz
      //--------化简------ 15/40 gcd(15,40)=5
      g=gcd(a,b);
      fm=a/g;
      fz=b/g; 
     }
     cout<<fz<<"/"<<fm<<endl;
     return 0;
    }
    
    

    输入
    4
    输出
    25/12

  • 以下回答由chatgpt基于相关博客总结生成:
    #include <bits/stdc++.h>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
        double a = 1.0, b = 1.0, sum = 0.0;
        if (n == 1) {
            printf("%.3lf", a / b);
            return 0;
        }
        for (int i = 2; i <= n; i++) {
            double c = a + b, d = b + c;
            sum += c / d;
            a = c, b = d;
        }
        printf("%.3lf", a / b + sum);
        return 0;
    }
    
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632