2020 Multi-University Training Little Rabbit's Equation 思維,簡單模擬
阿新 • • 發佈:2020-08-06
2020 Multi-University Training Little Rabbit's Equation
題目大意:
給你一個字串,形式是:數字,操作,數字,=,數字。
這個操作包括:+,-,*,/
保證字串沒有空格、沒有負號、沒有小數點,問這個數字是什麼進位制滿足等式,如果有多個,輸出最小的進位制,沒有則輸出-1。
題解:
直接模擬,有一個我覺得比較坑的點就是要判斷一下 \(A-F\) 和字串中的數字和進位制比較大小,如果比進位制大肯定是不對的。
#include <bits/stdc++.h> #define debug(x) cout<<"debug:"<<#x<<" = "<<x<<endl; using namespace std; typedef long long ll; const int maxn = 5e3+10; char s[20]; string a[10]; int main() { while (scanf("%s", s + 1) != EOF) { int n = strlen(s + 1), now = 0, flag = 0; a[0]="", a[1]="", a[2]="", a[3]=""; for (int i = 1; i <= n; i++) { if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || s[i] == '=') now++, a[3] += s[i]; else a[now] += s[i]; } for (ll base = 2; base <= 16; base++) { ll num[3],maxs = 0; for (int i = 0; i < 3; i++) { num[i] = 0; int len = a[i].size(); for (int j = 0,x; j < len; j++) { if (a[i][j] >= 'A' && a[i][j] <= 'Z') x = 10 + a[i][j] - 'A'; else x = a[i][j] - '0'; maxs = max(maxs,x*1ll); num[i] = num[i] * base + x; } } // debug(maxs); if(maxs>=base) continue; if (a[3][0] == '+' && num[0] + num[1] == num[2]) flag = base; if (a[3][0] == '-' && num[0] - num[1] == num[2]) flag = base; if (a[3][0] == '*' && num[0] * num[1] == num[2]) flag = base; if (a[3][0] == '/' && num[0] == num[2] * num[1]) flag = base; if (flag) break; } printf("%d\n", flag ? flag : -1); } return 0; }