【題解】UVA 10093 An Easy Problem!

【題目敘述】https://vjudge.net/problem/UVA-10093
【簡譯】題目給定一個 N 進制 (2 ≤ N ≤ 62) 的數字 R,R 保證可以被 (N-1) 整除。求符合提議的最小 N。當 N = 62 時,用來表示62進制的字符為 0..9, A..Z, a..z。

  • 一個N進位制的數,表示成【abc】 = a * N^2 + b * N + c
    • = a*N*(N-1+1) + b*(N-1+1) + c
    • = a*N*(N-1) + a*N + b*(N-1) + b + c
    • = a*N*(N-1) + a*(N-1) + a + b*(N-1) + b + c
    • = (a * N + a + b) * (N-1) + (a + b + c)
  • 如果一個N進位制的數【abc】是 (N-1) 的倍數,則 (a + b + c) 也是(N-1) 的倍數。
  • ⚠️注意:測資會有像 ” +A” 或 ” -5464″ 這樣有空白或正負號的字串。
#include <iostream>
using namespace std;

int main() {
	int sum, mx, temp;
	string s;
	while (getline(cin, s)){
		sum = 0;
		mx = 1;
		int i;
		for (i = 0; i < s.size(); i++) {
		    if (s[i] >= '0' && s[i] <= '9') {
		        temp = s[i] - '0';
		    }
		    else if (s[i] >= 'A' && s[i] <= 'Z') {
		        temp = s[i] - 'A' + 10;
		    }
		    else if (s[i] >= 'a' && s[i] <= 'z') {
		        temp = s[i] - 'a' + 36;
		    }
		    else continue;

		    if (mx < temp)
		        mx = temp;
		    sum += temp;
		}

        for (i = mx; i < 62; i++)
            if (!(sum % i)) {
            	cout << i + 1 << "\n";
            	break;
            }

        if (i == 62)
        	cout << "such number is impossible!\n";
    }
    return 0;
}
分享本文 Share with friends