#include <iostream>
#include <sstream>
#include <vector>
using namespace std;
int main(void)
{
string s;
while(getline(cin,s))
{
istringstream sin(s);
string a;
vector <double> p; //分成數字部分
vector <char> q; //還有運算子部分
while(sin>>a)
{
stringstream ss;
if(a[a.size()-1]<='9' && '0'<=a[a.size()-1])//如果 字串a 的末字元為數字,則 字串a 為數字
{
int c;
ss<<a;
ss>>c;
p.push_back(c); //將字串轉為int後放入 p 陣列中
}
else
{
p.push_back(0.1); //如果是運算子就已0.1代替,以利之後判斷
q.push_back(a[0]); //將運算元放進 q 陣列中
}
}
int j=-1,i=-1;
while(1)
{
if(p.size()==1)break; //若 p 陣列只剩 1 數字則跳出 while 迴圈
i++; //初始 i = 0
if(p[i]!=0.1 && p[i+1]!=0.1 && p[i+2]==0.1)//如果連續 2 個數字和 1 個運算子,則做運算
{
j++; // q 陣列的指標 j , 每做一次運算則用一個運算子
int t; //設一變數 t 為運算後的值
if(q[j]=='+')t=p[i]+p[i+1];
if(q[j]=='-')t=p[i]-p[i+1];
if(q[j]=='*')t=p[i]*p[i+1];
if(q[j]=='/')t=p[i]/p[i+1];
p[i]=t;
p.erase(p.begin()+i+1);
p.erase(p.begin()+i+1);//將運算後的 2 個數字及 1 個運算子以 t 替換
i=-1; // 再從頭跑一遍
}
}
cout<<p[0]<<endl; //輸出最終運算答案
}
system( "pause" );
return 0;
}
#include
#include
#include
using namespace std;
int main(void)
{
string s;
while(getline(cin,s))
{
istringstream sin(s);
string a;
vector p; //分成數字部分
vector q; //還有運算子部分
while(sin>>a)
{
stringstream ss;
if(a[a.size()-1]<='9' && '0'<=a[a.size()-1])//如果 字串a 的末字元為數字,則 字串a 為數字
{
int c;
ss<<a;
ss>>c;
p.push_back(c); //將字串轉為int後放入 p 陣列中
}
else
{
p.push_back(0.1); //如果是運算子就已0.1代替,以利之後判斷
q.push_back(a[0]); //將運算元放進 q 陣列中
}
}
int j=-1,i=-1;
while(1)
{
if(p.size()==1)break; //若 p 陣列只剩 1 數字則跳出 while 迴圈
i++; //初始 i = 0
if(p[i]!=0.1 && p[i+1]!=0.1 && p[i+2]==0.1)//如果連續 2 個數字和 1 個運算子,則做運算
{
j++; // q 陣列的指標 j , 每做一次運算則用一個運算子
int t; //設一變數 t 為運算後的值
if(q[j]=='+')t=p[i]+p[i+1];
if(q[j]=='-')t=p[i]-p[i+1];
if(q[j]=='*')t=p[i]*p[i+1];
if(q[j]=='/')t=p[i]/p[i+1];
p[i]=t;
p.erase(p.begin()+i+1);
p.erase(p.begin()+i+1);//將運算後的 2 個數字及 1 個運算子以 t 替換
i=-1; // 再從頭跑一遍
}
}
cout<<p[0]<<endl; //輸出最終運算答案
}
system( "pause" );
return 0;
}
你少了%的判斷,你可以重新看一次題目