ACM: 简单题 poj 1152 (简单题也wr…

来源:互联网 发布:厦门淘宝代运营 编辑:程序博客网 时间:2024/05/21 19:26
An Easy Problem!
Description
Have you heard the fact "Thebase of every normal number system is 10" ? Of course, I am nottalking about number systems like Stern Brockot Number System. Thisproblem has nothing to do with this fact but may have somesimilarity.

You will be given an N based integer number R and you are given theguaranty that R is divisible by (N-1). You will have to print thesmallest possible value for N. The range for N is 2<= N <= 62 and the digit symbols for62 based number is (0..9 and A..Z and a..z). Similarly, the digitsymbols for 61 based number system is (0..9 and A..Z and a..y) andso on.

Input

Each line in the input willcontain an integer (as defined in mathematics) number of anyinteger base (2..62). You will have to determine what is thesmallest possible base of that number for the given conditions. Noinvalid number will be given as input. The largest size of theinput file will be 32KB.

Output

If number with such condition isnot possible output the line "such number is impossible!" For eachline of input there will be only a single line of output. Theoutput will always be in decimal number system.

Sample Input

3
5
A

Sample Output

4
6
11

题意:N进制的数R, 找出最小的N使得R%(N-1) == 0;

解题思路:
         1. 我们知道R%(N-1) == 0可以推出R的每一位数的和sum%(N-1) == 0.
         2. 注意的是 2 <= N <= 62

代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
#define MAX 32769

char str[MAX];

inline int max(int a,int b)
{
    return a > b ? a : b;
}

inline int value(char ch)
{
    if(ch >= '0' && ch <= '9')
        return ch - '0';
    else if(ch >= 'A' && ch <= 'Z')
        return ch - 'A' + 10;
    else
        return ch - 'a' + 36;
}

int main()
{
//    freopen("input.txt","r",stdin);
    while( scanf("%s",str) != EOF )
    {
        int len = strlen(str);
        int sum = 0;
        int base = 0;
        for(int i = 0; i < len; ++i)
        {
            int temp = value(str[i]);
            base = max(base,temp);
            sum += temp;
        }
       
        if(base == 0)
        {
            printf("2\n");
            continue;
        }
       
        int i;
        for(i = base; i < 62; ++i)
        {
            if(sum % i == 0)
                break;
        }
        if(i == 62)
            printf("such number is impossible!\n");
        else
            printf("%d\n",i+1);
    }
    return 0;
}
0 0