85 计算多项式的值
作者: Turbo时间限制: 1S章节: 循环
问题描述 :
计算并输出当x<0.97时下列多项式的值,直到最后一项的绝对值小于threshold(该项不包括在多项式的结果中)为止。
image.png
输入说明 :
可输入多组测试数据,每组一行,每组包括两个实数,第一个为x(0.2≤x <0.97),第二个为threshold(≥0.000001),中间以空格分隔。
输出说明 :
对于每组测试数据,输出一行,为计算出的结果,保留6位小数。输出的结果前后均无空格。两组运算结果之间为空行。
输入范例 :
0.2 0.000001
0.21 0.000001
输出范例 :
1.095445
1.100000
代码如下:
#include <stdio.h>
#include <math.h>
int main(){
double x,threshold;
while(scanf("%lf%lf",&x,&threshold)!=EOF){
double e=1;
double s=1;//求和
double f=1;//阶乘
double t=1;//上面的数
double z;//求绝对值的
if(1<threshold)
{printf("0.000000\n");//特殊情况
printf("\n");
}
else {for(int i=1;i>=0;i++){
t*=(0.5-i+1);
e=1;//记得赋值
for(int j=1;j<=i;j++)
{e*=x;//x的n次方项
}
f*=i;//阶乘
z=(t*e)/f;
if(fabs(z)<threshold)
{printf("%.6lf\n",s);
printf("\n");
break;
}
else s+=z;
}
}
}
return 0;
}
借鉴别的博主代码:
将函数的功能进行拆分,提高程序的可读性
#include <stdio.h>
#include <math.h>
double fac(int n){//递归阶乘
if(n==0||n==1)
return 1;
else return n*fac(n-1);
}
double getnum(int n){
if(n==0)
return 0.5;
else return (0.5-n)*getnum(n-1);
}
int main(){
double x,threshold;
while(scanf("%lf%lf",&x,&threshold)!=EOF){
double sum=1;
double item,n;
if(threshold>1)
{printf("%lf\n\n",0);
continue;
}
n=1;
while(1){
item=getnum(n-1)/fac(n)*pow(x,n);
if(fabs(item)<threshold){
printf("%lf\n\n",sum);
break;
}
sum+=item;
n++;
}
}
return 0;
}