输入小于66的正整数n,输出以下数列的前n项之和(精确到小数点后9位):
2/1 3/2 5/3 8/5 13/8 21/13省略,麻烦有解题思路和过程
分子分母都是斐波那契数列
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int t,i,n;
int fm=1,fz=2;
double res = 0;
cin>>n;
for(i=0;i<n;i++)
{
res += (double)fz/fm;
t = fm;
fm = fz;
fz += t;
}
cout<<setiosflags(ios::fixed)<<setprecision(9)<<res;
return 0;
}
供参考:
#include <stdio.h>
void fun(int n)
{
int i;
double s = 0, k = 1.0, t = 2.0;//分母 分子初始项分别为 1 2
for (i = 1; i <= n; i++) {
s += t / k; //分项之和
t = t + k; //后项的分子 = 前项分子 + 前项分母
k = t - k; //后项的分母 = 前项的分子
}
printf("s=%.9f", s);
}
int main()
{
int n = 65;
scanf("%d", &n);
if(n <= 0 || n >= 66) n = 65;
fun(n);
return 0;
}