An Easy Problem!
题目连结
根本不简单,一大堆陷阱而且测值还没跟你说
解题
将0~9
A~Z
a~z
做成表格,去查表找位置(这样可以避免遇到一些奇怪的测值像是+与空格)
base 就是从哪里开始往上去找N
注意:测值会有一行字(有可能会跟要得不同)EX:再找字元时,用到最大的就是从他开始(如果遇到A,就是从时开始,因为0~9进位弄不出A==>溢位)
N 进位数字即 ${a_0}*n^{n-1}+{a_1}*n^{n-2}.....{a_{n-1}}*n^{1}+a_n
$
是可以被$a_n*a_{n-1}*.....*a_{0}
$ 整除换句话说把其拆分相加==>再去被除==>也同样是N base 的答案
+13A5
如果base 超过 62 就要输出such number is impossible!
code
#include <iostream>#include <vector>#include <cmath>#include <algorithm>using namespace std;const string board = {"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"};int main(int argc, char const *argv[]){ string s; while (getline(cin, s)) { bool flag = 0; int ans; int base = 1, sum = 0; for (int i = 0; i < s.length(); i++) { auto it = find(board.begin(), board.end(), s[i]); if (it != board.end()) { int side = distance(board.begin(), it); // cout << side << endl; if (base < side) base = side; sum = side + sum; // cout << "base:" << base << endl; } } // cout << sum << endl; for (int i = base; i <= 62; i++) { if (sum % i == 0) { cout << i + 1 << endl; break; } if (i == 62) { cout << "such number is impossible!" << endl; break; } } } return 0;}