人麻了,思路很简单清晰,但写起来 代码问题一堆。
思路:等式输入进字符串中,根据+ = -这些符号把多项式等式拆分成每个多项式项,例如 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")