一、题目
https://www.luogu.org/problemnew/show/P1022
二、代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int coe = 0; // coe * x = value, coe即为x的系数
int value = 0;
int pos = -1; // 数值位于等号左边的数为负(移到右边即为正),位于等号右边的数为正
char c = getchar();
int num = 0; // 当前读入的数值
int sign = 1; // 当前数值符号,
char x; // 未知数,26个小写字母之一
while(true)
{
if (c>='a' && c<='z')
{
x = c;
if (num == 0)
{
// 系数为1
coe += -pos * sign;
}
else
{
coe += -pos * sign * num; //系数左边为正,右边为负,所以pos要取负
}
num = 0;
sign = 1;
}
else if (c == '-')
{
value += pos * sign * num;
num = 0;
sign = -1;
}
else if (c == '+')
{
value += pos * sign * num;
num = 0;
sign = 1;
}
else if (c >= '0' && c <= '9')
{
num = num * 10 + c - '0';
}
else if (c == '=')
{
value += pos * sign * num;
num = 0;
sign = 1;
pos = -pos; //等号右边pos为正
}
else // 换行的时候,要把最后的数(如果有)累加到valu
{
value += pos * sign * num;
break;
}
c = getchar();
}
double ans = double(value) / coe;//计算ans
printf("%c=%.3f", x, ans == 0 ? abs(ans) : ans);//这涉及一个很坑的地方:C++里0除以一个负数值为-0,专门避免这种情况
return 0;
}
少儿编程、信息学竞赛咨询请加微信307591841或QQ群581357582
信息学竞赛公众号.jpg
网友评论