首页 > 试题广场 >

回文数字

[编程题]回文数字
  • 热度指数:38706 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在不使用额外的内存空间的条件下判断一个整数是否是回文。
回文指逆序和正序完全相同。


数据范围:
进阶: 空间复杂度 ,时间复杂度

提示:
负整数可以是回文吗?(比如-1)
如果你在考虑将数字转化为字符串的话,请注意一下不能使用额外空间的限制
你可以将整数翻转。但是,如果你做过题目“反转数字”,你会知道将整数翻转可能会出现溢出的情况,你怎么处理这个问题?
示例1

输入

121

输出

true
示例2

输入

122

输出

false
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param x int整型 
 * @return bool布尔型
 */
bool isPalindrome(int x ) {
    // write code here
    if(x<0)
       return false;
    if(x==0)
        return true;
    char *str=(char *)malloc(sizeof(char)*10000000);
    sprintf(str,"%d",x);//将一个整数变成一个字符串
    //printf("%s ",str);
    int left=0;
    int right=strlen(str)-1;
    while(left<right){
        if(str[left++]!=str[right--])
           return false;
    }
    return true;
}

发表于 2023-01-04 18:20:28 回复(0)

高兴,居然做出来了
思路是判断最高位和最低位是否相等,然后去掉最高位和最低位,保留中间的继续判断

bool isPalindrome(int x ) {
    // write code here
    if(x<0) return false;
    int p=x, len=0;
    while(p>10) {
        len++;
        p/=10;
    }
    printf("len:%d\n", len);
    for(int i=len; i>=1; i=i-2){
        int yu = x%10;
        int zhishu=1;
        for(int j=0; j<i; j++){
            zhishu*=10;
        }
        int gaowei= x/zhishu;
        printf("yu:%d, gaowei:%d\n", yu, gaowei);
        if(yu!=gaowei) return false;
        x%=zhishu;
        x/=10;
    }
    return true;
}
发表于 2022-11-10 16:09:34 回复(0)

问题信息

难度:
3条回答 20780浏览

热门推荐

通过挑战的用户