思路描述:最开始的思路是拿一个栈来存储数据和符号,在动手实践的过程中发现行不通,单个数字的char和int转换可以,但是加起来的数据两位数字就很难处理了。
然后就去看了看别人的思路,给了我一个很好的启发就是把数据和符号分开存储,但是在处理减号时思路再次打乱,突然就想到了双端队列!
整理后的思路如下:(可能思路和我卡在同一个地方的更容易看明白我在说啥,尽量想让博客写的更容易理解些,会努力加油的!)
贴下代码:
#include<iostream> #include<cstring>#include<deque> using namespace std; deque<int> num;//数据队列 deque<char> sign;//符号队列 int main() { int n; cin >> n; char c[10]; for (int i = 0; i < n; i++) { cin >> c; //每次开始前先将队列清空 while (!num.empty())num.pop_back(); while (!sign.empty())sign.pop_back(); //遍历输入的数据 for (int j = 0; j < 7; j++) { //数字压入数据队列 if (c[j] >= '0'&&c[j] <= '9') num.push_back(c[j] - '0'); else { //对符号进行处理 //如果是+,先压入符号队列 if (c[j] == '+' || c[j]=='-') sign.push_back(c[j]);else if (c[j] == 'x') { //运算后将运算结果压入队列中 int temp = num.back(); num.pop_back(); num.push_back(temp * (c[j + 1] - '0')); j++; } else if (c[j] == '/') { int temp = num.back(); num.pop_back(); num.push_back(temp / (c[j + 1] - '0')); j++; } } } //处理队列中剩余元素(进行加法运算) while (!sign.empty()) { int temp1 = num.front(); num.pop_front(); int temp2 = num.front(); num.pop_front(); if (sign.front() == '+')num.push_front(temp1 + temp2); else num.push_front(temp1 - temp2); sign.pop_front(); } //判断数据队列中剩余的最后一个元素 if (num.front() == 24) printf("%s ", "Yes"); else printf("%s ", "No"); } system("pause"); return 0; }