lee


私信TA

用户名:lotus

访问量:3307

签 名:

等  级
排  名 30252
经  验 460
参赛次数 0
文章发表 3
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

解题思路:

分步求解:

  1. 获得输入,进制(整数),数字(存为字符串数组);

  2. 获取输入数字的长度;

  3. 将字符串数组转化为整型数组(便于后续处理);

  4. 将输入的数字反向;

  5. 将输入的正向数字与转向后的反向数字相加;

  6. 判断相加后的和是否为回文;

  7. 循环反向并相加。

    注意事项:

    1. 输入进制的目的是按照输入的进制直接进行相加,而不需要换成十进制。

    2. 在相加的过程中 数字的长度是变化的,需要根据最新的结果更新。


参考代码:



#include <stdio.h>

#include <stdlib.h>

#include <math.h>


//对输入的数字 字符串 进行翻转

void intRever(int origNum[], int length, int tarNum[])

{

    int i,j;

    for(i = 0, j = length -1; i < length; i++, j--)

    {

        tarNum[i] = origNum[j];

    }

    tarNum[i] = '\0';

}


//判断输入数据是否为回文数

int isRever(int origNum[], int length)

{

    int i,j;

    i=0;

    j=length-1;

    while(i<j && origNum[i]==origNum[j])

    {

        i++;

        j--;

    }

    return i>=j;

}


//逐步递增获取回文数

void getPalin(int origNum[], int *length, int tarNum[], int hex)

{

    int i,k = 0;

    for(i = 0; i < *length; i++)

    {

        origNum[i] = origNum[i] + tarNum[i] + k;

        k = origNum[i]/hex;

        origNum[i] %= hex;

    }

    if(k > 0)

    {

        origNum[i] = k;

        *length = i+1;

    }

    

}


void charToInt(char origInput[],int length,int origNum[])

{


    int i = 0;

    

    for(i =  0; i < length; i++)

    {

        if(origInput[i] >= 'A' && origInput[i] <= 'F')

            origNum[i] = origInput[i] - '0' - 7;

        else if(origInput[i] >= 'a' && origInput[i] <= 'f')

            origNum[i] = origInput[i] - '0' - 39;

        else if(origInput[i] >= '0' && origInput[i] <= '9')

            origNum[i] = origInput[i] - '0';

        else

        {

            printf("input error\n");

        }

    }

    origNum[i] = '\0';

    

}


int main()

{

    int hex;

    char charInput[1000];

    int stepTotal = 30;

    

    while((scanf("%d",&hex)==1))

    {

        if(hex < 2 || hex > 16)

        {

            return 0;

        }

        if((scanf("%s",charInput)==1))

        {

            int origNum[1000] = {0};

            int tarNum[1000] = {0};

            int step = 0;

            int length = strlen(charInput);

            charToInt(charInput,length,origNum);

            while(step<=stepTotal)

            {

                intRever(origNum, length, tarNum);

                getPalin(origNum, &length, tarNum, hex);

                step += 1;

                if(isRever(origNum, length)==1)

                {

                    printf("STEP=%d\n",step);

                    break;

                }

            }

            if(step > stepTotal)

                printf("Impossible!\n");

        }

    }

    

    return 0;

    

}

 

0.0分

0 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区