双基回文数

编写一个程序来检查一个数字是否是双基回文数。

回文是指从前往后读和从后往前读都一样的字母、数字的序列。

双基回文数是指在十进制和二进制表示中都是回文的数字。

例如:

585 = 1001001001

是一个双基回文,其二进制是回文形式,十进制也是回文形式。

  • 定义函数check_double_base_palindrome(),参数为整数。
  • 在函数内,检查数字的十进制和二进制形式是否都是回文。
  • 如果是双基回文,返回True,否则返回False

示例输入

313

示例输出

True

我用了几种方法去做,但是只有一种是正确的,大家帮忙看一下

(1)第一种是正确的

def check_double_base_palindrome(number):
    num=bin(number)
    lst1=list(int (i) for i in str(number))
    lst2=list(int(j) for j in str(num)[2:])
    new_lst1=lst1[::-1]
    new_lst2=lst2[::-1]
    if lst1==new_lst1 and lst2==new_lst2:
        return True
    else:
        return False
number = int(input())
print(check_double_base_palindrome(number))

(2)然后大家看一下第二种我感觉想法应该没错,但是一直输出都是False

def check_double_base_palindrome(number):
    num=bin(number)
    str1=str(number)
    str2=str(num)[2:]
    if number!=int(str(number)[::-1]):
        return False
    elif str(num)!=str(num)[::-1]:
        return False
    else:
        return True
number = int(input())
print(check_double_base_palindrome(number))

(3)还有第三种,也是一直输出为False。

def check_double_base_palindrome(number):
    num=bin(number)
    str1=str(number)
    str2=str(num)[2:]
    n1=0
    n2=0
    for i in range(len(str1)):
        if str1[i]==str1[len(str1)-i-1]:
            n1=1
        else:n1=0
    for j in range(len(str2)):
        if str2[j]==str2[len(str2)-j-1]:
            n2=1
        else:
            n2=0
    if n1+n2==2:
        return True
    else:
        return False
number = int(input())
print(check_double_base_palindrome(number))

大家帮我看一下这个第二种和第三种哪里错了。

全部评论

相关推荐

循此苦旅:月初笔试全a,没面试!
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务