2 条题解
-
0
#include #include #include #define ll long long
using namespace std;
const int N = 1e8 + 10, mod = 10000; ll n, stk[N], tt = -1; string s;
int main() { cin >> s; // 读入整个表达式 ll l = s.size(); // 长度 for (ll i = 0; i < l; ++i) { // 从头遍历到尾 if (s[i] >= '0' && s[i] <= '9') n = n * 10 + (s[i] - '0'); //如果是数字进行累记 else if (s[i] == '+') { // 如果是加法,把之前累计的数字压栈 if (n != 0) { stk[++tt] = n % mod; n = 0; } }
else { // 如果是乘法,将之前累计的数字压栈 if (n != 0) { stk[++tt] = n % mod; n = 0; } ++i; while (s[i] >= '0' && s[i] <= '9') { // 读入下一个数字 n = n * 10 + (s[i] - '0'); ++i; } --i; // 指针回退一个 stk[++tt] = n % mod; // 压栈 n = 0; ll a = stk[tt--]; // 取出两个数字相乘,得到的结果压栈保存 ll b = stk[tt--]; a = a * b; stk[++tt] = a % mod; } } stk[++tt] = n % mod; // 如果最后一个符号是+,则余下一个数字,压栈 ll ans = 0; while (tt >= 0) { // 将栈内数字全部累加得到答案 ans = (ans + stk[tt--]) % mod; } cout << ans;}
-
0
#include <bits/stdc++.h> using namespace std; long long a[100002]; bool b[100001]; int main() { string str; int i, t = 0, top = 0; long long sum = 0; cin >> str; int len = str.size(); for (i = 0; i < len; ++i) if (str[i] == '+') { a[++top] = t; t = 0; } else if (str[i] == '*') { a[++top] = t; t = 0; b[top] = true; } else t = t * 10 + str[i] - '0'; a[++top] = t; for (i = 1; i <= top; ++i) if (b[i]) { a[i + 1] = a[i] * a[i + 1] % 10000; a[i] = 0; } for (i = 1; i <= top; ++i) sum = (sum + a[i]) % 10000; cout << sum << endl; return 0; }
- 1
信息
- ID
- 6034
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 3
- 标签
- 递交数
- 44
- 已通过
- 22
- 上传者