题解 | [NOIP1999]回文数

[NOIP1999]回文数

https://www.nowcoder.com/practice/a432eb24b3534c27bdd1377869886ebb

#include <stdio.h>
#include <string.h>

void transform (char ch[], int a[], int len)
{
    int i = 0;
    int j = len-1;

    for (j=j; j>=0; --j)
    {
        if (ch[j] >= '0' && ch[j] <= '9')
        {
            a[i] = ch[j] - '0';
        }
        else
        {
            a[i] = ch[j] - 'A' + 10;
        }
        ++i;
    }
}

int is_palindromic(int a[], int len)
{
    int i = 0;
    int j = len - 1;

    while (i < j)
    {
        if (a[i] != a[j])
        {
            return 0;
        }  
        ++i;
        --j; 
    }

    return 1;
}

void get_palindromic(int a[], int b[], int len)
{
    int i = 0;
    int j = 0;

    for (i=len-1, j=0; i>=0; --i, ++j)
    {
        b[j] = a[i];
    }
}


void add(int a[], int b[], int *len, int scale) //scale进制的加法
{
    int i = 0;
    int div = 0;

    while (i < *len)
    {
        div = (a[i] + b[i]) / scale;
        a[i] = (a[i] + b[i]) % scale;
        ++i;
        a[i] = a[i] + div;

        if (a[*len] > 0)
        {
            (*len)++;
        }    
    }
}


int get_step(char ch[], int scale)
{
    int count = 0;
    int len = strlen(ch);
    int a[30] = {0};
    int b[30] = {0};
    transform(ch, a, len);

    while (!is_palindromic(a, len))
    {
        get_palindromic(a, b, len);
        add(a, b, &len, scale);
        ++count;

        if(count > 30)
        {
            return count;
        }
    }

    return count;
}



int main() {
    char ch[8];
    int scale = 0;
    int step = 0;
    scanf("%d", &scale);
    scanf("%s",ch);
    step = get_step(ch, scale);

    if (step > 30)
    {
        printf("Impossible!");
    }
    else
    {
        printf("STEP=%d", step);
    }
    
    return 0;
}

全部评论

相关推荐

废物一个0offer:认真的吗二本本科找人工智能岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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