P1022 计算器的改良解题报告
P1022 计算器的改良解题报告
此题采用变量累计常数之和与未知数系数之和即可,在解题时遇到的问题:
- 没有进行四舍五入(在运算的元素定义为float后,在进行除操作,即可自动进行四舍五入)
- string的访问为字符数组,下标应该从0开始
- 逻辑框架出现混乱,应先在草稿纸上做出思路在进行写代码。
代码:
#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;
}