ZOJ - 3930 Dice Notation 【模拟】

mac2022-06-30  24

题目链接

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3930

题意 给出一串字符串

如果是 ‘+’ ‘-’ ‘*’ ‘/’ 那么需要在前后分别加一个空格

如果遇到 纯数字 直接输出

如果遇到 adx 这样的

要化成 ([dx] + [dx] + [dx]) (a 个 dx)

但是要注意 x 和上面的纯数字 都可能是大数 然后 a 可以用long long 保存

还有 1dx 或者 dx 都是 输出 [dx] 两端没有括号

AC代码

#include <cstdio> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cmath> #include <climits> #include <ctime> #include <iostream> #include <algorithm> #include <deque> #include <vector> #include <queue> #include <string> #include <map> #include <stack> #include <set> #include <numeric> #include <sstream> #include <iomanip> #include <limits> #define CLR(a) memset(a, 0, sizeof(a)) #define pb push_back using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; typedef pair <int, int> pii; typedef pair <ll, ll> pll; typedef pair<string, int> psi; typedef pair<string, string> pss; const double PI = acos(-1); const double E = exp(1); const double eps = 1e-30; const int INF = 0x3f3f3f3f; const int maxn = 5e4 + 5; const int MOD = 1e9 + 7; ll tran(string s) { ll ans = 0; int len = s.size(); for (int i = 0; i < len; i++) ans = ans * 10 + s[i] - '0'; return ans; } int main() { int T; scanf("%d ", &T); while (T--) { string s; getline(cin, s); int len = s.size(); string temp = ""; for (int i = 0; i < len; i++) { if (s[i] == ' ') continue; else if (s[i] == '(' || s[i] == ')') printf("%c", s[i]); else if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') printf(" %c ", s[i]); else if (isdigit(s[i])) { temp.clear(); temp = temp + s[i]; i++; while (i < len && isdigit(s[i])) temp = temp + s[i++]; if (s[i] == 'd') { ll num = tran(temp); if (num != 1) printf("("); temp.clear(); temp = temp + "[d"; i++; while (i < len && isdigit(s[i])) temp = temp + s[i++]; i--; temp = temp + ']'; int len = temp.size(); for (ll i = 0; i < num; i++) { cout << temp; if (i <= num - 2) printf(" + "); } if (num != 1) printf(")"); } else { i--; cout << temp; } } else if (s[i] == 'd') { printf("[d"); i++; while (isdigit(s[i]) && i < len) { printf("%c", s[i++]); } i--; printf("]"); } } printf(" = [Result]\n"); } }

转载于:https://www.cnblogs.com/Dup4/p/9433141.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)