练习PTA基础编程题“6-2多项式求值”本地调试与提交踩坑
熬过大一开会,又来练习PTA编程题,6-2多项式求值。题目要求:

第一个问题:禁止使用 math.h 时,如何手算 x 的 n 次方?
现象:题目要求不能使用标准数学库math.h
过程:手写整数次方
解决:
方案一尝试:代码如下

方案二尝试(我并未使用,是下次的使用方案):秦九昭算法
double sum = 0.0;
for(int i = n; i >= 0; i--)
{
sum = sum * x + a[i];
}
第二个问题:循环顺序写反:先加后乘 vs 先乘后加
过程:第一次写的代码

现象:当n=1,x=2,a[0] = 1, a[1] = 2时答案为3,正确答案为5
原因:没能搞清循环先后顺序
解决:问一图中代码
分析:先乘后加会导致指数高了一次,先加后乘把ans=1直接视为x的零次方
第三个问题:对库的过于依赖,丧失手写能力
现象:多数时候直接采用库中标准函数,欠缺了手写循环体的能力
正确做法:严格按照题目,强化能力,规范自身
总结:编码的内核很多其实是数学套用,正确的循环顺序依赖思维能力。多数时间都是想代码,而不是敲键盘。
能把优美的数学公式用代码实现才是真本事。
总代码如下:
double f( int n, double a[], double x )
{
int k;
double sum = 0;
double ans = 1;
for(k=0;k<=n;k++){
sum += a[k]*ans;
ans *= x;
}
return sum;
}
浙公网安备 33010602011771号