羊博士粉丝团代理团长 2019-05-12 15:51
浏览 329

hduoj 简单计算机 麻烦大佬们帮忙看看哪里错了

麻烦哪位大佬帮忙看看哪里错了,谢谢各位
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36

```#include

using namespace std;
int si(string a)//字符串转为整数
{
int s=0;
for(int i=0;i {
s=s*10+(a[i]-'0');
}
return s;
}
int main()
{
string str,s;vector v;
while(getline(cin,str))//获取一行字符
{
v.clear();//重置向量v
if((str.size()==1)&&(str[0]='0'))
break;//判断是否结束
for(int i=0;i {
if(str[i]==' ')
{
if(s!="+"&&s!="-"&&s!="*"&&s!="/")
v.push_back(si(s));
else
{
if(s=="+")
v.push_back(-1);
if(s=="-")
v.push_back(-2);
if(s=="*")
v.push_back(-3);
if(s=="/")
v.push_back(-4);
}
s.clear();
continue;
}
s+=str[i];
}
v.push_back(si(s));
s.clear();
vector::iterator it;//定义迭代器
for(int i=0;i<v.size();i++)//先计算乘除
{
if(v[i]==-3)
{
v[i-1]=v[i-1]*v[i+1];
it=v.begin()+i;
v.erase(it,it+2);//两个数一个符号计算后保留结果,删去其他两位
i=0;
}
if(v[i]==-4)
{
v[i-1]=v[i-1]/v[i+1];
it=v.begin()+i;
v.erase(it,it+2);
i=0;
}
}
for(int i=0;i<v.size();i++)//计算加减
{
if(v[i]==-1)
{
v[i-1]=v[i-1]+v[i+1];
it=v.begin()+i;
v.erase(it,it+2);
i=0;
}
if(v[i]==-2)
{
v[i-1]=v[i-1]-v[i+1];
it=v.begin()+i;
v.erase(it,it+2);
i=0;
}
}//输出结果,此时v里面只剩下结果
cout<<setprecision(2)<<setiosflags(ios::fixed)<<v[0]<<endl;
}
}

  • 写回答

0条回答

    报告相同问题?

    悬赏问题

    • ¥15 武汉岩海低应变分析软件,导数据库里不显示波形图
    • ¥15 CreateBitmapFromWicBitmap内存释放问题。
    • ¥30 win c++ socket
    • ¥30 CanMv K210开发板实现功能
    • ¥15 C# datagridview 栏位进度
    • ¥15 vue3页面el-table页面数据过多
    • ¥100 vue3中融入gRPC-web
    • ¥15 kali环境运行volatility分析android内存文件,缺profile
    • ¥15 写uniapp时遇到的问题
    • ¥15 vs 2008 安装遇到问题