注意
1.绝对值小于0.00001 abs()
2.时间超限 --> 不可以用阶乘函数
3.有些可以重复用,不用算那么多
4.求幂级数展开的部分和
超限代码
#include<iostream>
#include<cmath>
#define eps 1e-5
using namespace std;
int jie(int n){
int sum=1;
for(int i=2;i<=n;i++){
sum=sum*i;
}
return sum;
}
int main(){
double x;cin>>x;
double sum=1;
for(int k=1;;k++){
sum+=pow(x,k)/jie(k);
if(abs(pow(x,k)/jie(k))<eps)break;
}
printf("%.4lf",sum);
return 0;
}
改成while还是超限
#include<iostream>
#include<cmath>
#define eps 1e-5
using namespace std;
int jie(int n){
int sum=1;
for(int i=2;i<=n;i++){
sum=sum*i;
}
return sum;
}
int main(){
double x;cin>>x;
double sum=1,index=1,k=1;
while(abs(index)>eps){
index=pow(x,k)/jie(k);
sum+=index;
k++;
}
printf("%.4lf",sum);
return 0;
}
改进代码
while 把阶乘放到里面
#include<iostream>
#include<cmath>
#define eps 1e-5
using namespace std;
int main(){
double x;cin>>x;
double sum=1,index=1,k=1,jie=1;
while(abs(index)>eps){
for(int i=1;i<=k;i++){
jie*=i;
}
index=pow(x,k)/jie;
sum+=index;
k++;
jie=1.0; //!!不要忘了
}
printf("%.4lf",sum);
return 0;
}
for 在计算第i项时可以利用到第i-1项的结果
参考代码
#include<iostream>
#include<cmath>
#define eps 1e-5
using namespace std;
int main(){
double x;cin>>x;
double sum=1,index=1;
for(int k=1;;k++){
index=(index*x)/k;
sum+=index;
if(abs(index)<eps)break;
}
printf("%.4lf",sum);
return 0;
}