解题思路:不是很难,主要涉及10进制数和其他进制数的转换,我的注释比较详细

参考代码:

# 将n进制数转换成10进制
def ChangeToTen(n, m):
    result = 0
    i = 0
    while m != 0:
        result += m % 10 * pow(n, i)
        i += 1
        m //= 10
    return result


# 将数字反转
def ChangeConvert(n):
    result = str(n)  # 数字转字符串
    result = list(result)  # 字符串转列表
    lenth = len(result)
    for i in range(lenth // 2):
        t = result[i]
        result[i] = result[lenth - 1 - i]
        result[lenth - 1 - i] = t
    result = ''.join(result)  # 列表转字符串
    return int(result)


# 将10进制转换成n进制
def ChangeToOther(n, m):
    result = 0
    i = 0
    while m != 0:
        result += m % n * pow(10, i)
        i += 1
        m //= n
    return result


# 判断数字是否为回文
def IsHuiwen(n):
    result = str(n)  # 数字转字符串
    lenth = len(result)
    for i in range(lenth // 2):
        if result[i] != result[lenth - 1 - i]:
            return 0
    return 1


if __name__ == '__main__':
    while 1:
        n = int(input())
        m = int(input())
        STEP = 0
        flag = 1
        if n == 10:
            if IsHuiwen(m):
                print("STEP=" + str(STEP))
            else:
                while IsHuiwen(m) == 0:
                    m += ChangeConvert(m)
                    STEP += 1
                    if STEP > 30:
                        flag = 0
                        print("Impossible!")
                        break
                if flag:
                    print("STEP=" + str(STEP))
        else:
            if IsHuiwen(m):
                print("STEP=" + str(STEP))
            else:
                while IsHuiwen(m) == 0:
                    # # 将n进制数转换成10进制
                    # a = ChangeToTen(n, m)
                    # # 将n进制数字反转
                    # b = ChangeConvert(m)
                    # # 将n进制反转的数字转换成10进制
                    # c = ChangeToTen(n, b)
                    # # 未反转的十进制与反转的十进制相加
                    # d = a + c
                    # # 将上述相加产生的十进制转换成n进制
                    # m = ChangeToOther(n, d)

                    m = ChangeToOther(n, ChangeToTen(n, m) + ChangeToTen(n, ChangeConvert(m)))
                    STEP += 1
                    if STEP > 30:
                        flag = 0
                        print("Impossible!")
                        break
                if flag:
                    print("STEP=" + str(STEP))


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论