交错地对了五个点,不知道第二个点为什么过不了大数据,大神们能帮忙看一下吗?
思路是先处理乘法,找到乘号就向左向右搜索两个数字,然后乘号与左右两个数字替换为结果。
然后处理加法,最后输出时做做处理
#include <iostream>
#include <string>
using namespace std;
typedef long long ll;
int mod = 10000;
int main() {
string s;
cin >> s;
int len = s.size();
for (int i = 1; i < len; i++) {
if (s[i] == '*') {
ll l = 0, r = 0;
int ls = i, rs = i;
while (s[--ls] >= '0' && s[ls] <= '9' && ls >= 0) {
int k = 1;
for (int j = 0; j < i - ls - 1; j++) {
k *= 10;
}
l += (s[ls] - '0') * k;
}
while (s[++rs] >= '0' && s[rs] <= '9' && rs < len) {
r = r * 10 + s[rs] - '0';
}
int dis = rs - 1 - (ls + 1) + 1;
ll res = l * r % mod;
string result = "";
while (res) {
char ch;
ch = res % 10 + '0';
result = ch + result;
res /= 10;
}
s.replace(ls + 1, dis, result);
len = len - dis + result.size();
i = ls + 1;
}
}
for (int i = 1; i < len; i++) {
if (s[i] == '+') {
ll l = 0, r = 0;
int ls = i, rs = i;
while (s[--ls] >= '0' && s[ls] <= '9' && ls >= 0) {
int k = 1;
for (int j = 0; j < i - ls - 1; j++) {
k *= 10;
}
l += (s[ls] - '0') * k;
}
while (s[++rs] >= '0' && s[rs] <= '9' && rs < len) {
r = r * 10 + s[rs] - '0';
}
int dis = rs - 1 - (ls + 1) + 1;
ll res = (l + r) % mod;
string result = "";
while (res) {
char ch;
ch = res % 10 + '0';
result = ch + result;
res /= 10;
}
s.replace(ls + 1, dis, result);
len = len - dis + result.size();
i = ls + 1;
}
}
ll ans = 0;
for (int i = max(len - 4, 0); i < len; i++) {
ans = ans * 10 + s[i] - '0';
}
cout << ans << endl;
return 0;
}