人麻了,思路很简单清晰,但写起来 代码问题一堆。
思路:等式输入进字符串中,根据+ = -这些符号把多项式等式拆分成每个多项式项,例如 2x^2, 3x ,-4 。
然后对这些项计算二次项系数a,一次项系数b,常数项系数c,利用求根公式得到结果。
但实际在拆分的时候边界条件还是非常麻烦,但最后求出a,b,c就很简单输出答案了
#include <iostream>
#include <vector>
#include <string>
#include <iomanip>
#include <cmath>
using namespace std;
int main() {
string equation;
int a=0, b=0, c=0;
vector<string> elements;
char signal = '+';
bool flag = true;
while (cin >> equation) { // 注意 while 处理多个 case
int index = equation.find('=');
string equation1 = equation.substr(0, index);
string equation2 = equation.substr(index + 1);
for (int i = 1, j = -1; i < equation1.size(); i++) {
if (equation1[i] == '+') {
elements.push_back(signal + equation1.substr(j + 1, i - j - 1));
signal = '+';
j = i;
} else if (equation1[i] == '-') {
elements.push_back(signal + equation1.substr(j + 1, i - j - 1));
signal = '-';
j = i;
}
if (i == equation1.size() - 1) {
elements.push_back(signal + equation1.substr(j + 1, i - j + 1));
signal = '-';
}
}
for (int i = 1, j = -1; i < equation2.size(); i++) {
if (equation2[i] == '+') {
elements.push_back(signal + equation2.substr(j + 1, i - j - 1));
signal = '-';
j = i;
} else if (equation2[i] == '-') {
elements.push_back(signal + equation2.substr(j + 1, i - j - 1));
signal = '+';
j = i;
}
if (i == equation2.size() - 1) {
elements.push_back(signal + equation2.substr(j + 1, i - j + 1));
}
}
// cout<<equation2<<endl;
int signal;
for (int i = 0; i < elements.size(); i++) {
if (elements[i][0] == '+') signal = 1;
else signal = -1;
if (elements[i].find("x^2") != string::npos) {
string s = elements[i].substr(1, elements[i].size() - 4);
if (s.size() == 0) s = "1";
a += signal * stoi(s);
} else if (elements[i].find("x") != string::npos) {
string s = elements[i].substr(1, elements[i].size() - 2);
if (s.size() == 0) s = "1";
// cout<<signal * stoi(s)<<endl;
b += signal * stoi(s);
} else {
string s = elements[i].substr(1, elements[i].size() - 1);
if (s.size() == 0) s = "1";
c += signal * stoi(s); }
// cout << elements[i] << endl;
}
// cout<<a<<" "<<b<<" "<<c<<"";
double derta = (double)b * b - 4 * a * c;
if (derta > 0) cout <<fixed<<setprecision(2)<<
(-b + pow(derta,0.5)) / (2 * a)
<< " "
<< (-b - pow(derta, 0.5)) / (2 * a) << endl;
else cout << "No Solution" << endl;
}
}
// 64 位输出请用 printf("%lld")



京公网安备 11010502036488号