D


私信TA

用户名:ALS1111

访问量:19383

签 名:

等  级
排  名 51
经  验 10929
参赛次数 0
文章发表 132
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

解题思路:

本题的主要难度在于不同进制数的相加计算。

十进制和十六进制可以做特殊处理。

具体方案如下,代码有详细注释。

注意事项:

参考代码:

def cal_n(a,b):    #n进制加法计算  
    global n  
  
    if n == 10:  
        return str(int(a)+int(b))  
    elif n == 16:    
        a = list(a)  
        for i in range(len(a)):  #将a中的字母转换为对应的值  
            if 'A'<=a[i]<='F':  
                a[i] = str(ord(a[i])-55)  
                  
        b = list(b)  
        for i in range(len(b)):  #将b中的字母转换为对应的值  
            if 'A'<=b[i]<='F':  
                b[i] = str(ord(b[i])-55)  
  
        T = 0      #存储进位  
        c = ''     #存储本位  
        for i in range(len(a)-1,-1,-1):   #a和b相加,从后往前计算  
            temp = int(a[i])+int(b[i])  
            if (temp+T)%n > 9:  
                c = c + chr(55+(temp+T)%n)  
            else:  
                c = c + str((temp+T)%n)  
            T = (temp+T)//n  
        if T:      #不要忘记如果最后进制大于0,需要加上  
            c = c + str(T)  
        return c[::-1]          #逆序即为结果  
    else:  
        T = 0  
        c = ''  
        for i in range(len(a)-1,-1,-1):  
            temp = int(a[i])+int(b[i])  
            c = c + str((temp+T)%n)  
            T = (temp+T)//n  
        if T:  
            c = c + str(T)  
        return c[::-1]           
  
def check(x):    #检查是否为回文数  
    if x == x[::-1]:  
        return 1  
    else:  
        return 0  
  
def f(n,num):  
    step = 0  
    while True:  
        if check(num):  
            print('STEP={}'.format(step))  
            break  
        else:  
            num_ = num[::-1]  
            num = cal_n(num,num_)  
            step = step+1  
        if step > 30:  
            print('Impossible!')  
            break  
  
  
if __name__ == '__main__':  
    n = int(input())  
    num = input().strip()  
    f(n,num)


 

0.0分

2 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换

万能编程问答

代码解释器

  评论区