所以,关于如何制作一个基本的计算器(它只有运算符+
和-
,以及(
和)
括号),存在一个问题.由于某些原因,代码在Leetcode上给出了不正确的输出,而在线编译器使用相同的测试用例给出了正确的输出.这里的问题可能是什么?
我的代码(在Leetcode上):
int pos = 0;
int calculate(char *s) {
int sign = 1;
int sum = 0;
int len = strlen(s);
while (pos < len && s[pos] != ')') {
if (s[pos] == '-') {
sign = -1;
printf("-\n");
}
else if (s[pos] == '+') {
sign = 1;
printf("+\n");
}
else if (s[pos] == '(') {
pos++;
sum += sign * calculate(s);
printf("%d\n", sum);
} else {
int a = s[pos] - 48;
if (a >= 0 && a < 10) {
sum = sum + a * sign;
printf("%d\n", sum);
}
}
pos++;
}
return sum;
}
编译器上的代码(添加了一个main
函数来调用函数calculate
):
// Online C compiler to run C program online
#include <stdio.h>
int pos = 0;
int calculate(char *s) {
int sign = 1;
int sum = 0;
int len = strlen(s);
while (pos < len && s[pos] != ')') {
if (s[pos] == '-') {
sign = -1;
printf("-\n");
}
else if (s[pos] == '+') {
sign = 1;
printf("+\n");
}
else if (s[pos] == '(') {
pos++;
sum += sign * calculate(s);
printf("%d\n", sum);
} else {
int a = s[pos] - 48;
if (a >= 0 && a < 10) {
sum = sum + a * sign;
printf("%d\n", sum);
}
}
pos++;
}
return sum;
}
int main() {
printf("\n\nResult: %d", calculate(" (2-1 + 2 -(2+2))+8"));
return 0;
}
Leetcode处理全局变量的方式有问题吗? 测试用例使用:
输入:s = "1 + 1"
输入:s = " 2-1 + 2 "
输入:s = "(1+(4+5+2)-3)+(6+8)"
在所有这些测试用例中,在线编译器给出了准确的输出,而Leetcode只对第一个给出了正确的输出