2021.07.26 P1022 计算器的改良(字符串)

改进:

如果是我出题,我一定把未知数设为ab、buh、bluesky之类的长度不只是1的字符串!

题意:

一个一元一次方程,求解。

分析:

1.处理未知数之前的系数,别忘了-x||+x||=x的系数为-1||1||1;

2.处理已知数,参考快读

3.处理结果

代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
string s;
char letter;
int num,xi,sum;
inline int read(){
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-')w=-1;
		ch=getchar();
	}
	while(ch<='9'&&ch>='0'){
		s=s*10+ch-'0';
		ch=getchar();
	}
	return s*w;
}
int main(){
	cin>>s;
	int fu=1,flag=0;
	for(int i=0;i<s.length();i++){
		//cout<<"fu "<<fu<<" num "<<num<<" sum "<<sum<<" xi "<<xi<<" falg "<<flag<<endl;//
		if(s[i]=='='){
			if(!flag)sum+=fu*num;
			else sum-=fu*num;
			flag=fu=1,num=0;
		}else if(s[i]=='+'){
			if(!flag)sum+=fu*num;
			else sum-=fu*num;
			fu=1,num=0;
		}else if(s[i]=='-'){
			if(!flag)sum+=fu*num;
			else sum-=fu*num;
			fu=-1,num=0;
		}else if(s[i]>='a'&&s[i]<='z'){
			letter=s[i];
			if(s[i-1]=='-'||s[i-1]=='+'||s[i-1]=='='||i==0)num=1;
			//if(s[i-1]=='+')num=1;
			if(!flag)xi+=-1*fu*num;
			else xi+=fu*num;
			num=0;
		}else if(s[i]>='0'&&s[i]<='9')num=num*10+s[i]-'0';
	}
	if(s[s.length()-1]>='0'&&s[s.length()-1]<='9')sum-=fu*num;
	//cout<<"fu "<<fu<<" num "<<num<<" sum "<<sum<<" xi "<<xi<<" falg "<<flag<<endl;//
	double ans=(double)sum/(double)xi;
	printf("%c=%.3lf",letter,ans);
	return 0;
}
 posted on 2021-07-26 23:00  eleveni  阅读(52)  评论(0)    收藏  举报