社区讨论
问一下为什么第五个点WA
P1022[NOIP 2000 普及组] 计算器的改良参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @locm039k
- 此快照首次捕获于
- 2023/10/30 15:59 2 年前
- 此快照最后确认于
- 2023/11/05 03:07 2 年前
CPP
#include <cstdio>
#include <algorithm>
#include <string>
#include <cctype>
#include <iostream>
using namespace std;
int cxs=0,ccs=0;//当前系数与常数
char sign(string s) {
for(int i=0; i<s.length(); i++) {
if(isalpha(s[i]))
return s[i];
}
return 0;
}
int main() {
string func;
char x;//代表未知数的字母
cin>>func;
int i,len=func.length(),k=0,cs=0,xs=0; //k记录等号位置
bool fu=false; //判断是否为负数
x=sign(func);
for(i=0; i<len; i++) { //等号前
if(isdigit(func[i])) {
ccs=ccs*10+func[i]-'0';
cxs=cxs*10+func[i]-'0';
}
else {
if(func[i]==x) { //如果当前是未知数
if(!isdigit(func[i-1])) //处理系数为1的情况
cxs=1;
if(fu) { //如果为负数
cxs=-cxs;
fu=false;
}
xs+=cxs;
} else { //如果当前不是未知数
if(fu) {
ccs=-ccs;
fu=false;
}
cs+=ccs;
}
ccs=cxs=0;
}
if(func[i]=='-')
fu=true;
if(func[i]=='=') { //注意这句的位置
k=i;
break;
}
}
fu=false;
for(i=k+1; i<len; i++) {
if(isdigit(func[i])) {
ccs=ccs*10+func[i]-'0';
cxs=cxs*10+func[i]-'0';
}
else {
if(func[i]==x) { //如果当前是未知数
if(!isdigit(func[i-1])) //处理系数为1的情况
cxs=1;
if(fu) { //如果为负数
cxs=-cxs;
fu=false;
}
xs-=cxs;
} else { //如果当前不是未知数
if(fu) {
ccs=-ccs;
fu=false;
}
cs-=ccs;
}
ccs=cxs=0;
}
if(func[i]=='-')
fu=true;
}
//只要最后一个不是数字cxs=ccs=0
if(ccs!=0){
if(fu)
ccs=-ccs;
cs-=ccs;
}
printf("%c=%.3lf",x,(-cs)/(double)xs);
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...