#11770: line 6 Help~~ ((TAT


leo2015621 (味蕾)

學校 : 基隆市私立二信高級中學
編號 : 55558
來源 : [140.114.34.247]
最後登入時間 :
2020-04-27 20:36:36
d016. 後序運算法 | From: [1.169.65.82] | 發表日期 : 2017-02-25 00:10

#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;
}

 
#19415: Re:line 6 Help~~ ((TAT


089487 (089487)

學校 : 國立臺灣師範大學附屬高級中學
編號 : 82069
來源 : [220.130.10.185]
最後登入時間 :
2024-04-01 11:16:18
d016. 後序運算法 | From: [223.137.132.74] | 發表日期 : 2019-09-29 20:54

#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;
}

你少了%的判斷,你可以重新看一次題目




 
ZeroJudge Forum