求助大佬!!
查看原帖
求助大佬!!
319003
肉包铁1810楼主2020/8/20 23:21

交错地对了五个点,不知道第二个点为什么过不了大数据,大神们能帮忙看一下吗?

思路是先处理乘法,找到乘号就向左向右搜索两个数字,然后乘号与左右两个数字替换为结果。

然后处理加法,最后输出时做做处理

#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;
}
2020/8/20 23:21
加载中...