P1022 计算器的改良解题报告

P1022 计算器的改良解题报告


此题采用变量累计常数之和与未知数系数之和即可,在解题时遇到的问题:

  1. 没有进行四舍五入(在运算的元素定义为float后,在进行除操作,即可自动进行四舍五入)
  2. string的访问为字符数组,下标应该从0开始
  3. 逻辑框架出现混乱,应先在草稿纸上做出思路在进行写代码。
    代码:
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
string sz;
float t,x;//t表示常数项,x表示系数 
int f=1;// f表示符号 1为正,-1为负 
int b=1;//b=1 表示算式等号前面,b=-1表示算式等号后面 
char c;
void dr(string s){
	f=1,b=1;
	long long tmp=0;
	long len=s.length();
	for(int i=0;i<len;i++){
		if(s[i]=='=') t+=tmp*f*b,b=-1,tmp=0,f=1;
		if(s[i]>='0'&&s[i]<='9'){
			tmp*=10;
			tmp+=s[i]-'0';
		}
		if(s[i]=='+'||s[i]=='-'){
			t+=tmp*f*b;//导入上一次的值进入t;
			tmp=0;
			if(s[i]=='+') f=1;
			if(s[i]=='-') f=-1; 
		}
		if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')){
			if(s[i-1]>'9'||s[i-1]<'0') tmp=1;
			c=s[i];
			x+=tmp*f*b;//导入值入x
			tmp=0; 
		}
//		cout<<"c="<<s[i]<<"	tmp="<<tmp<<"	t="<<t<<"	x="<<x<<endl;
	}
	t+=tmp*f*b;
}

int main(){
	cin>>sz;
	t=0;
	x=0;
	dr(sz);
	t*=-1;
//	cout<<"t="<<t<<"	x="<<x<<endl;
	cout<<c<<"=";
	printf("%.3f",t/x);
	return 0;
}
posted @ 2020-04-04 22:05  wased  阅读(98)  评论(0编辑  收藏  举报