【问题描述】:
=1 + x/1!+/2! + /3! +…+ /n!
给定x和n,利用上述公式求得的近似值。
【输出形式】:
从控制台输入小数x,和整数n(n >=1),用空格隔开。 (例:7 27)
【输出形式】:
向控制台输出求得的的近似值(小数点后保留6位有效数据) (得:1096.633156)
#include<iostream>
#include<math.h>
#include<iomanip>
using namespace std;
int main()
{
double x,Sn,An=1,Sum=1; //Sn记得用double定义,范围太大用int会出错!
int n;
cin>>x>>n;
for(int i=1;i<=n;i++) //求和
{
An=pow(x,i); //分子
Sn=1;
//分母,Sn一定要放外循环for里面,让其每次执行完一次内循环的for要刷新,不然Sn会一直累积
for(int j=1;j<=i;j++)
{
Sn*= j; //等于Sn= Sn*j;
}
Sum+=An/Sn //等于Sum=Sum+An/Sn;
}
cout<<fixed<<setprecision(6)<<Sum;
}
【思路解析】
1.把当作是各个项加起来的总和Sum
2.然后把各项拆分成分子An和分母Sn两部分分别求出来再相除
3.分子An部分用pow()函数可以求出
**补充下:pow函数用法: pow(底数,指数),记得要在上面加个头文件#include<math.h> **
4.分母Sn部分用一个for循环让他从1到第i个数相乘求i的阶乘。
** 补充下:n!就是指n的阶乘,就是指1*2*3*.....*n的积。 **
5.然后用for循环把整个包起来,从1开始加到第n项求总和Sum。
6.因为小数点后保留6位有效数据,所以用上fixed<<setprecision(6)
**补充下:setprecision()函数用法: 在cout中要输出数据前加<<fixed<<setprecision(n),就是为小数点后保留n位有效数据,记得要在上面加个头文件#include<iomanip> **