首先是第一次的代码
class Solution
{
public:int evalRPN(vector<string> &tokens){stack<long long> str;for (int i = 0; i < tokens.size(); i++){if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/"){// 用于将字符串转换为 long long 类型的整数。str.push(stoll(tokens[i]));}else{// 没有办法直接把表达符放中间就一个一个iflong long num1 = str.top();str.pop();long long num2 = str.top();str.pop();if (tokens[i] == "+")str.push(num1 + num2);if (tokens[i] == "*")str.push(num1 * num2);if (tokens[i] == "-")str.push(num2 - num1);if (tokens[i] == "/")str.push(num2 / num1);}}int sum = str.top();return sum;}
};
然后是第二次的代码
问题一在于 我该如何再不确定运算符的情况下进行计算——————就是一个一个if
问题二在于注意string和char的区别一个是双引号一个是单引号
问题三在于类型的对应问题 “no matching member function for call to 'push'” 这就是说明把string的类型传入了int 中需要进行类型的转换,又考虑到只有数字进去了所以只对数字进行转换即可。
但是stoll
是 C++ 中用于将字符串转换为 long long
类型整数的函数,所以这就意味着栈也必须是long long类型的
第二版代码逻辑正确但是有两个很细节的问题
class Solution {
public:int evalRPN(vector<string>& tokens) {stack<long long> s1; // 存放输入int size = tokens.size();for (int i = 0; i < size; i++) {if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" &&tokens[i] != "/") {s1.push(stoll(tokens[i]));} else {if (tokens[i] == "+") {int a = s1.top();s1.pop();int b = s1.top();s1.pop();int c = a + b; // 我该如何再不确定运算符的情况下进行计算s1.push(c);continue;} else if (tokens[i] == "-") {int a = s1.top();s1.pop();int b = s1.top();s1.pop();int c = a - b;s1.push(c);continue;} else if (tokens[i] == "*") {int a = s1.top();s1.pop();int b = s1.top();s1.pop();int c = a * b;s1.push(c);continue;} else if (tokens[i] == "/") {int a = s1.top();s1.pop();int b = s1.top();s1.pop();int c = a / b;s1.push(c);continue;}}}int result = s1.top();return result;}
};
细节一:外面都是long long类型 那么里面也应该是一样的,所以都需要改成了long long‘
细节二:就是运算顺序的问题,先出来的那个应该是在运算符的右边、
然后经过实验也不是说一定要转成long long 类型我们直接使用stoi把他们都转成int类型的也可以。
存储范围:
int
:通常是 4 字节(32 位),它的取值范围是:- 有符号(signed)
int
:-2^31
到2^31 - 1
,即大约-21亿
到21亿
。 - 无符号(unsigned)
int
:0
到2^32 - 1
,即大约0
到42亿
。
- 有符号(signed)
long long
:通常是 8 字节(64 位),它的取值范围是:- 有符号(signed)
long long
:-2^63
到2^63 - 1
,即大约-9.2 x 10^18
到9.2 x 10^18
。 - 无符号(unsigned)
long long
:0
到2^64 - 1
,即大约0
到18.4 x 10^18
。
- 有符号(signed)