这是一道在PTA上的简单题,但是由于我是一个新手刚开始使用这个平台很多地方都不熟悉,这里是来讲解一些我遇见的问题和这道题的难点。
首先便是输入代码一直给你说编译错误,比如
告诉你redefinition of 'main',这个时候你仔细看题,会发现有一个“裁判测试程序样例”,并且在下方有一段“/*你的代码将被镶嵌在这里的提示*/”,那么问题便在这个地方,你不用写那些#include int main()的头文件,因为上文都已经写好了,你只用完成你需要写的代码部分。
在这道题里你便只用完成
double f(int n,double a[],double x){
double f=0;
for(int i=n;i>=0;i--){
f=a[i]+f*x;
}
return f;
}
这一部分的书写。
其实这道题有两个方法,我在自己做计算的时候,因为要算x的i次方,写了一个循环套循环,当输入数字很大时,很容易卡住,出现runtime wrong,因此要避免。
这道题中,第一个方法,是使用化简,将多项式化简,如
则有了
double f(int n,double a[],double x){
double f=0;
for(int i=n;i>=0;i--){
f=a[i]+f*x;
}
return f;
}
第二种方法,便是使用函数
pow函数应用于c/c++中,计算x的y次方的次幂
#include <math.h>
double f(int n,double a[],double x){
double f=0;
for(int i=1;i<=n;i++){
f=f+a[i]*pow(x,i);
}
return f;
}
不过需要添加#include <math.h> 才可以使用。