想死我了
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
#include<string.h>
char c[100] = {0};
bool IsPalindrome(char* p, int len)
{
int left = 0;
int right = len - 1;
while ((left) < (right))
{
if (p[left++] != p[right--])
return false;
}
return true;
}
int getInt(char n)//将'0'-'9'转换为0-9;'a'-'z'转换成10-35
{
if (n >= '0' && n <= '9')
return n - '0';
else
{
return n - 'A' + 10;
}
}
char getChar(int n)//将0-9转换为'0'-'9';a-z转换成’a'-‘z'
{
if (n >= 0 && n <= 9)
return n + '0';
else
return n - 10 + 'A';
}
void Add(char* a,int N,int len)
{
int sum1 = 0;
int sum2 = 0;
int tail = 0;
int begin = 0;
int end = len - 1;
int i = 0;
while (end >= 0)
{
sum1 = getInt(a[begin]);
sum2 = getInt(a[end]);
c[i] = getChar((sum1+sum2+tail)%N);
tail = (sum1 + sum2 + tail) / N;
end--;
begin++;
i++;
}
while (tail > 0)
{
c[i] = getChar(tail % N);
tail /= N;
i++;
}
}
int main()
{
char a[100] = {0};
int N = 0;
scanf("%d", &N);
getchar();
scanf("%s", a);
int len = strlen(a);
if (IsPalindrome(a, len))
{ printf("STEP=%d\n",1);
return 1;
}
int count = 0;
while (!IsPalindrome(a,len))
{
Add(a,N,len);
strcpy(a,c);
len = strlen(c);
count++;
if (count >= 31)
{
printf("Impossible!\n");
return 0;
}
}
printf("STEP=%d\n",count);
return 0;
}

京公网安备 11010502036488号