题目:
给定一个字符串,代表一个 一元一次 方程。如果有解求解,输出格式“x=数字” ,如果解的个数无穷,输出 “infinite solutions”, 如果没有解输出“no solution”。
字符串长度不超过 256 。
输入:
10x-2x-8=4x+7+x
输出:
x=5
#include<iostream>
#include<string>
using namespace std;
int main() {
string s;
cin >> s;
int sym = 1, flag = 1; //sym表示数字之前的符号,flag表示等号左右
int a = 0, b = 0;//系数,常数
int i = 0;
while (i < s.size()) {
if (s[i] == '=') {
sym = 1;
flag = -1;
}
else if (s[i] == '+')
sym = 1;
else if (s[i] == '-')
sym = -1;
else { //遇到数字或x
int t = 0;
while (i < s.length() && s[i] >= '0'&&s[i] <= '9') {
t = 10 * t + (s[i] - '0');
i++;
}
if (s[i] == 'x'&&t == 0) { x之前的系数为1
a += sym * flag;
}
else if (s[i] == 'x')
a += t * sym*flag;
else {
b += t * sym*flag;
continue; //直接进行下一次循环是因为:上面while循环中处理数字之后已经++i
}
}
i++;
}
if (a == 0 && b == 0) {
printf("infinite solutions\n");
}
else if (a != 0 && b % a == 0) {
printf("x=%d\n", -b / a);
}
else {
printf("no solution\n");
}
system("pause");
return 0;
}