羊博士粉丝团代理团长 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 Arcgis相交分析无法绘制一个或多个图形
    • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
    • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
    • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
    • ¥30 3天&7天&&15天&销量如何统计同一行
    • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
    • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
    • ¥15 vs2019中数据导出问题
    • ¥20 云服务Linux系统TCP-MSS值修改?
    • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)