问一下为什么第五个点WA
查看原帖
问一下为什么第五个点WA
468029
dfxgbm楼主2021/2/18 11:47
#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;
}

2021/2/18 11:47
加载中...