题解 | #[NOIP1999]回文数#

[NOIP1999]回文数

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

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


//翻转字符串
void reverse_str(char* str)
{
    //获取字符串的长度
    int n = strlen(str);
    for (int i = 0; i < n/2; i++)
    {
	  //将末字符串移动到当前位置
        char temp = str[i];
        str[i] = str[n - i - 1];
        str[n - i - 1] = temp;
    }
}
//检查字符串是否为回文
int IsPrimeNum(char* str)
{
    //获取字符串长度
    int len = strlen(str);
    for (int i = 0; i < len; i++)
    {
        if (str[i] != str[len - i - 1])
            //不是回文数
            return 0;
    }
    //出来就是回文数
    return 1;
}
//将数字与逆序相加
void AddRverse(int base,char*num,char*result)
{
    //存放num的反转字符串
    char reversed[101];
    //将num复制到reversed
    strcpy(reversed, num);
    //反转reversed
    reverse_str(reversed);
    //进制的初始化
    int carry = 0;
    int n = strlen(num);
    //存放临时求和的结果
    int sum = 0;
    int i = 0;
    //初始化result为0
    memset(result, 0, sizeof(char));
    //对数字和反转数字相加
    for (i = 0; i < n; i++)
    {
        int digit1 = (num[n - i - 1] >= 'A') ? (num[n - i - 1] - 'A' + 10) : (num[n - i - 1] - '0');
        int digit2 = (reversed[n - i - 1] >= 'A') ? (reversed[n - i - 1] - 'A' + 10) : (reversed[n - i - 1] - '0');
        sum = digit1 + digit2 + carry;
        //转换为字符
        result[i] = (sum % base < 10) ? (sum % base + '0') : (sum % base - 10 + 'A');
        //更新进位
        carry = sum / base;
    }
    //最后还有进位
    if (carry > 0)
    {
        result[i++] = (carry < 10) ? (carry + '0') : (carry - 10 + 'A');
    }
    result[i] = '\0';
    reverse_str(result);
}
int main()
{
    int base;
    char num[101];
    //读取进制和数字
    scanf("%d", &base);
    scanf("%s", &num);
    char result[101] = "";
    int step = 0;
    for (step = 0; step <= 30; step++)
    {
        if (IsPrimeNum(num))
        {
            printf("STEP=%d", step);
            return 0;
        }

        AddRverse(base, num, result);
        strcpy(num, result);
    }
    printf("Impossible!");
    return 0;
}       

全部评论

相关推荐

10-21 16:54
门头沟学院 Java
后端转测开第一人:微服务没用 校招都不看微服务的 还有就是后端行情是这样的 找实习纯看运气 秋招更是吃运气和缘分 如果对代码没有极致的追求 可以转测开
应届生简历当中,HR最关...
点赞 评论 收藏
分享
11-23 17:35
已编辑
济宁学院 Java
不想做程序员:面试官:蓝桥杯三等奖?你多去两次厕所都能拿二等吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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