题解 | #牛的回文编号III#

牛的回文编号III

https://www.nowcoder.com/practice/6af8b6e39b004329a48cc2cd823e5b30

考察知识点:回文,字符串

解题分析:将十进制数转为二进制数,进行回文判断

详细的思路分析在代码注释里

采用的编程语言:C

完整的编码代码:如下所示

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param x int整型 
 * @return bool布尔型
 */
bool isPalindromeNumberIII(int x ) {
    char tmp_str[36] = {0};
    int tmp_x = x, count = 31;
    int flag = 1;

  	// 初始化数组为字符0
    for (int i = 0; i < count; i++)
        tmp_str[i] = '0';

  	// 如果输入的数值为负数时,需要转为正数进行运算
    if (tmp_x < 0)
        tmp_x = -tmp_x;

  	// 根据十进制转二进制的计算公式,将十进制转为二进制字符串(就是那个十进制求余数来获取二进制的公式)
    while (tmp_x > 0) {
        if ((tmp_x % 2) == 0)
            tmp_str[count--] = '0';
        else
            tmp_str[count--] = '1';

        tmp_x /= 2;
    }

  	// 这里如果输入的值为负数时,需要将二进制进行补码的计算
    if (x < 0) {
        for (int i = 0; i < 31; i++) {
		  // 这部分处理补码的进位关系
            if (tmp_str[i] == '1') {
                tmp_str[i] = '0';
                if (tmp_str[i+1] == '0')
                    tmp_str[i+1] = '1';
                else
                    tmp_str[i+1] = '0';
            } else
                tmp_str[i] = '1';
        }
    }

  	// 进行回文判断
    for (int i = 0; i < 16; i++) {
        if (tmp_str[i] != tmp_str[31-i]) {
            flag = 0;
            break;
        }
    }

    if (flag)
        return true;
    else
        return false;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

投递腾讯等公司8个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务