登录之后查看代码,点此登录账号
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
int main(){
string str;
cin >> str;
int a = 0, b = 0; //系数、常数
int sym = 1, flag = 1; //sym表示数字之前的符号,flag表示等号的左右(初始值为1,表示在左面)
int i = 0; //访问字符串的下标
while(i < str.size()){
if(str[i] == '='){
sym = 1;
flag = -1;
}
else if(str[i] == '+'){
sym = 1;
}
else if(str[i] == '-'){
sym = -1;
}
else{ //遇到数字或者x
int t = 0; //暂存遇到的数字值
while(i < str.size() && str[i] >= '0' && str[i] <= '9'){ //遇到数字,计算数值
t = 10 * t + (str[i] - '0');
++i;
}
//当表达式最后一位是数字时,比如2x+4-3x=x-2,上面while的循环会使i >= str.size()成立
if(i >= str.size()){
b -= t * sym;
break;
}
if(str[i] == 'x' && t == 0){ //如果x之前的系数为正负1时,要单独判断,因为此时t=0
a += sym * flag;
}
else if(str[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");
}
return 0;
}