พหุนามคืออะไร?
พหุนาม (Polynomial) มาจากสองคำว่า "Poly" ซึ่งหมายถึง "หลาย" และ "nomial" ซึ่งหมายถึง "พจน์" ประกอบด้วยหลายพจน์ นิพจน์พหุนามเป็นนิพจน์ที่ประกอบด้วยตัวแปร สหประจักร และเลขชี้กำลัง ซึ่งเกี่ยวข้องกับการดำเนินการเช่น การบวก การคูณ และการลบของตัวแปร
ตัวอย่างพหุนาม
x² + x + 1
อนุพันธ์ของพหุนาม
อนุพันธ์ของพหุนาม p(x) = m·xⁿ จะเป็น:
m × n × x^(n-1)
ตัวอย่าง
Input: str = "2x^3 +1x^1 + 3x^2" val = 2 Output: 37 Explanation: 6x^2 + 1x^0 + 6x^1 Putting x = 2 6*4 + 1 + 6*2 = 24 + 1 + 12 = 37 Input: str = "1x^3" val = 2 Output: 12 Explanation: 1 * 3 * x^2 Putting x = 2 3 * 4 = 12
แนวทางการแก้ปัญหา
- รับอินพุตเป็นสตริงและค่าของ x
- ลูปผ่านสตริงและตรวจสอบตัวเลขและตัวแปร
- สะสมและลูปต่อจนพบเครื่องหมาย '+'
- คำนวณ m * n * x^(n-1)
- คืนค่าผลลัพธ์
อัลกอริทึม
Start
Step 1 → In function long long term(string polyterm, long long val)
Declare and initialize coeffStr = ""
Declare i
Loop For i = 0 and polyterm[i] != 'x' and i++
Call coeffStr.push_back(polyterm[i])
Set coeff = atol(coeffStr.c_str())
Declare and initialize powStr = ""
Loop For i = i + 2 and i != polyterm.size() and i++
powStr.push_back(polyterm[i])
Set power = atol(powStr.c_str());
Return coeff * power * pow(val, power - 1)
Step 2 → In function long long value(string& str, int val)
Set ans = 0
Call istringstream is(str)
Declare string polyterm
Loop While is >> polyterm
If polyterm == "+" then,
Continue
Else
Set ans = (ans + term(polyterm, val))
Return ans
Step 3 → In function int main()
Declare and initialize str = "2x^3 + 1x^1 + 3x^2"
Declare and initialize val = 2
Print the value received by value(str, val)
Stop
ตัวอย่างโค้ด C++
#include <iostream>
#include <sstream>
#include <string>
#include <cmath>
using namespace std;
long long term(string polyterm, long long val) {
// to find the coefficient
string coeffStr = "";
int i;
for (i = 0; polyterm[i] != 'x'; i++)
coeffStr.push_back(polyterm[i]);
long long coeff = atol(coeffStr.c_str());
// to get the power value
string powStr = "";
for (i = i + 2; i != polyterm.size(); i++)
powStr.push_back(polyterm[i]);
long long power = atol(powStr.c_str());
// For ax^n, we return a(n-1)x^(n-1)
return coeff * power * pow(val, power - 1);
}
long long value(string& str, int val) {
long long ans = 0;
// using istringstream to get input in tokens
istringstream is(str);
string polyterm;
while (is >> polyterm) {
// check if the token is equal to '+' then continue with the string
if (polyterm == "+")
continue;
// Otherwise find the derivative of that particular term
else
ans = (ans + term(polyterm, val));
}
return ans;
}
// main function
int main() {
string str = "2x^3 + 1x^1 + 3x^2";
int val = 2;
cout << value(str, val);
return 0;
}
ผลลัพธ์
37