-
题目描述:
-
对于一个不存在括号的表达式进行计算
-
输入:
-
存在多种数据,每组数据一行,表达式不存在空格
-
输出:
-
输出结果
-
样例输入:
-
6/2+3+3*4
-
样例输出:
-
18
-
来源:
题目:
如上
解法:
第一步处理所有*/(高优先级的符号)
再处理+-
Code:
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <stdio.h>
#include <math.h>
int main() {
std::string input;
while (std::cin >> input) {
for (int i = 0; i < input.size(); i++) {
if (input[i] == '*' || input[i] == '/') {
int front = 0;
int post = 0;
int count = 0;
int front_pos, post_pos;
for (int j = i - 1; j >= 0 && input[j] != '+' && input[j] != '-' && input[j] != '*' && input[j] != '/'; j--) {
front += (input[j] - '0') * pow(10, count++);
front_pos = j;
}
for (int j = i + 1; j < input.size() && input[j] != '+' && input[j] != '-' && input[j] != '*' && input[j] != '/'; j++) {
post = post * 10 + (input[j] - '0');
post_pos = j;
}
int result;
if (input[i] == '*') {
result = front*post;
}
else {
result = front / post;
}
char result_c[500];
snprintf(result_c, sizeof(result_c), "%d", result);
input.replace(front_pos, post_pos - front_pos + 1, result_c);
i = front_pos;
}
}
// std::cout << input << "\n";
for (int i = 0; i < input.size(); i++) {
if (input[i] == '+' || input[i] == '-') {
int front = 0;
int post = 0;
int count = 0;
int front_pos, post_pos;
for (int j = i - 1; j >= 0 && input[j] != '+' && input[j] != '-' && input[j] != '*' && input[j] != '/'; j--) {
front += (input[j] - '0') * pow(10, count++);
front_pos = j;
}
for (int j = i + 1; j < input.size() && input[j] != '+' && input[j] != '-' && input[j] != '*' && input[j] != '/'; j++) {
post = post * 10 + (input[j] - '0');
post_pos = j;
}
int result;
if (input[i] == '+') {
result = front + post;
}
else {
result = front - post;
}
char result_c[500];
snprintf(result_c, sizeof(result_c), "%d", result);
input.replace(front_pos, post_pos - front_pos + 1, result_c);
i = front_pos;
}
}
std::cout << input << "\n";
}
// system("pause");
}