資訊學奧賽一本通 1012:計算多項式的值 | OpenJudge NOI 1.3 07

君義_noip發表於2020-12-27

一、 題目連結

ybt 1012:計算多項式的值
OpenJudge NOI 1.3 07:計算多項式的值

二、 題目考點

  1. 計算表示式書寫
    瞭解*的運算優先順序比+高。
    瞭解()可以改變運算優先順序
  2. 輸出浮點型數字a保留x位小數的寫法:
    cout<<fixed<<setprecision(x)<<a;
    printf("%.xf", a);
  3. 浮點型量的精度
    float 單精度浮點型,可以表示6~7位有效數字
    double 雙精度浮點型,可以表示15~16位有效數字
    本題要輸出小數點後7位,為保險起見,選用double型別
  4. (擴充套件)秦九韶演算法

三、題解程式碼

解法1:普通解法。使用cin, cout進行輸入輸出。

#include <bits/stdc++.h>
using namespace std;
int main()
{
	double x, a, b, c, d;
	cin>>x>>a>>b>>c>>d;
	cout<<fixed<<setprecision(7)<<a*x*x*x+b*x*x+c*x+d;
	return 0;
}

解法2:普通解法。使用scanf, printf進行輸入輸出

#include <bits/stdc++.h>
using namespace std;
int main()
{
	double x, a, b, c, d;
	scanf("%lf %lf %lf %lf %lf", &x, &a, &b, &c, &d);
	printf("%.7f", a*x*x*x+b*x*x+c*x+d);
	return 0;
}

解法3:使用秦九韶演算法

  • 可以減少相乘次數,也可以減少表示式長度
#include <bits/stdc++.h>
using namespace std;
int main()
{
	double a, b, c, d;
	cin>>x>>a>>b>>c>>d;
	cout<<fixed<<setprecision(7)<<x*(x*(a*x+b)+c)+d;
	return 0;
}

相關文章