- 回文数
 - @ 2017-01-23 16:19:32
 
#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 100000
long long int str_int(char s[], int n)
{
    int i, strl;
    long long int result = 0;
    strl = strlen(s);
    for (i = 0; i < strl; i++)
    {
        if(s[i]<'A')
            result += (s[i]-'0')*(double )pow((double)n,(double)(strl-i-1));
        else
            result += (s[i] - 'A'+10)*(double)pow((double)n, (double)(strl-i-1));
    }
    return result;
}
void int_str(char s[],long long int source, int n)
{
    int i=MAX-1,j;
    while(source>0)
    {
        if (source%n < 10)
            s[i] = '0' + source%n;
        else
            s[i] = 'A' + source%n - 10;
        i--;
        source = source / n;
    }
    i++;
    for (j = 0; i < MAX; i++, j++)
    {
        s[j] = s[i];
    }
    s[j] = '\0';
}
int judge(char s[])
{
    int strl,i;
    strl = strlen(s);
    for (i = 0; i < strl / 2; i++)
    {
        if (s[i] != s[strl - 1 - i])
            return 0;
    }
    return 1;
}
void add(char s[],int n)
{
    int i, strl,result;
    char s1[MAX];
    strl = strlen(s);
    for (i = 0; i < strl; i++)
    {
        s1[i] = s[strl - 1 - i];
    }
    s1[i] = '\0';
    result = str_int(s, n) + str_int(s1, n);
    int_str(s, result, n);
}
int main()
{
    int n;
    char s[MAX];
    int i;
    scanf("%d", &n);
    scanf("%s", s);
    for (i = 0; i <= 30; i++)
    {
        if (judge(s))
        {
            printf("STEP=%d", i);
            break;
        }
        add(s, n);
    }
    if (i > 30)
        printf("Impossible!");
    return 0;
}