题解 | #[NOIP1999]回文数#

想死我了
#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;
}

全部评论

相关推荐

头顶尖尖的程序员:我是26届的不太懂,25届不应该是找的正式工作吗?为什么还在找实习?大四还实习的话是为了能转正的的岗位吗
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务