C++求等比数列之和

题目内容:已知qn,求等比数列之和:1+q+q2+q3+q4+……+qn。

输入描述:输入数据不多于50对,每对数据含有一个整数n1<=n<=20)、一个小数q(0<q<2)

输出描述:对于每组数据nq,计算其等比数列的和,精确到小数点后3位,每个计算结果应单独占一行。

题目分析:对于等比数列之和Sn=a1+a2+a3+……+an,有公式Sn=a1(1-qn)/(1-q) (q!=1)。本题要求的等比数列,实际上是有n+1项,且a1=1

另外,求xy的函数是pow(x,y),他需要”#include<cmath>”。

本题要求控制小数点后的位数,如果采用C语言的printf函数来输出,那么控制小数点后的位数形式为”printf(“%*.*f”,a);”,如”printf(“%.3f\n”,sum);”。如果采用C++cout输出,那么先用”cout.precision(n);”来设定小数点后保留n位,然后,输出时加”fixed”参数,表明是定点输出。

参考代码:

#include <vector>

#include <iostream>

#include <fstream>

#include <cmath>

using namespace std;

struct Sum{int n;double q;};

int main(int argc,char * argv[])

{

    vector<Sum> pair(50);

    int num=0;

    while(num<=49)

    {

        cin>>pair[num].n>>pair[num].q;

        if(pair[num].n>=1&&pair[num].n<=20&&pair[num].n>0&&pair[num].q<2)

        {

            num++;

        }

        else if(pair[num].n<1||pair[num].n>20||pair[num].q<=0||pair[num].q>=2)

        {

            cout<<"The input is out of range";

        }

        if(cin.get()=='\n')

        {

            break;

        }

    }

    cout.precision(3);

    double sum;

    for(int i=0;i<num;i++)

    {

        if(pair[i].q==1)sum=1+pair[i].n;

        else

            sum=(1-pow(pair[i].q,pair[i].n+1))/(1-pair[i].q);

        cout<<fixed<<sum<<endl;

    }

    system("pause");

    return 0;

}

效果如图:

C++求等比数列之和

你可能感兴趣的:(C++)