C++求等比数列之和
题目内容:已知q与n,求等比数列之和:1+q+q2+q3+q4+……+qn。
输入描述:输入数据不多于50对,每对数据含有一个整数n(1<=n<=20)、一个小数q(0<q<2)。
输出描述:对于每组数据n和q,计算其等比数列的和,精确到小数点后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; }
效果如图: