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;
}

效果如图:

posted @ 2013-10-21 14:49  源子陌  Views(3935)  Comments(0Edit  收藏  举报