数据结构多项式求和

实现两个一元多项式的相加,输出相加后的结果

其中的难点主要是对结果的输出

假设两个多项式的和为:
0x^6+0x^2-5x^3-x^2+3x^1+3
则输出结果为:
-5x^3-x^2+3x+3

 代码:

#多项式相加在输出
def dispose_data(str): #处理多项式数据 ,lis中存放的是多项式中的系数和指数 如:[1,2,3,4,5,0] = x^2+3x^4+5x^0
    # 将输入的字符串转str化为列表m
    str = str.split(',')
    lis = list(str)
    # 将列表中的','全部移除
    for i in lis:
        if i == ',':
            lis.remove(i)
    #用字典来记录多项式,key里面存指数,value里面存系数
    #在多项式中指数是唯一的,所有用key值来存     {2:1,4:3,0:5}
    dic = dict() # key->指数  value -> 系数
    coe = [] #存放 系数 的列表
    index = [] #存放 指数 的列表
    for i in range(len(lis)):
        if i % 2 !=0: # lis 中下标是从 0 开始的,所以奇数项是指数
            index.append(lis[i])
        else: # # lis 中下标是从 0 开始的,所以偶数项是系数
            coe.append(lis[i])
    for i in range(len(index)): # 将指数(key) 与 系数(value)对应的存放在字典dic里
        if index[i] in dic.keys():
            #这个条件是为了判断当前的指数存在于keys中时 ,那么对应的系数就为现在的系数 + keys中对应的系数
            # 如: 4x^2+3x^4+5x^2 = 9x^2+3x^4
            dic[index[i]]=int(coe[i])+int(dic[index[i]])  #key ->指数  value ->系数
        else:#如果不存在则将指数与系数对应
           dic[index[i]]= int(coe[i])
    return dic
def add_polynomial(dic1,dic2):
    add_dic = dict() # 用来存放两个多项式相加的和
    #多项式相加
    #第一种情况:指数 x 在dic1中存在 也在dic2中存在
    for i in dic1.keys():
        for j in dic2.keys():
            if i == j:
                add_dic[i]=int(dic1[i])+int(dic2[i])
    #第二种情况:指数 想 在dic1中存在 但在dic2中不存在
    for i in dic1.keys():
        if i not in dic2.keys():
            add_dic[i]=dic1[i]
    #第三种情况:指数 x 在dic2中存在 但在dic1中不存在
    for i in dic2.keys():
        if i not in dic1.keys():
            add_dic[i]=dic2[i]
    #这里调用了 sorted函数 对 add_dic中的key值进行降序排序
    add_dic = dict(sorted(add_dic.items(), key=lambda kv:kv[0],reverse = True))
    return  add_dic
def print_polynomial(poly):#输出多项式
    i = 0 # 这个i用来记录这一项是第一项 i=0表示第一项
    str1 = '' #这个使用来拼接输出的多项式
    for y,x in poly: # x表示系数  y表示指数
        if x !=0: #系数!= 0 的时候才输出
            if i == 0: #这个是第一项
                i=i+1 #之后在输出的就不是第一项了
                # x == 1 x==-1  , x<0 和 x>1 是一种情况   6x^4 + 5x^5
                if x == 1: #如果系数 = 1    1x^6 + 5x^5 = x^6 + 5x^5
                    # 这里的 y = "1",和多项式在字典中是以字符形式存储的
                    if y == "1": #如果指数 =1 则不必输出指数  x^1 + 5x^5 = x + 5x^5
                        str1 += "x"
                        # 这里的 y = "0",和多项式在字典中是以字符形式存储的
                        #下面的同理
                    elif y == "0" : #如果指数=0, x^0 + 5x^5 = 1 + 5x^5
                        str1 += "1"
                    else:  #其余情况 1x^6 + 5x^5 = x^6 + 5x^5
                        str1 += "x^"+str(y)
                elif x == -1 : #如果系数等于 -1 , -x^1 + 5x^5 = -x + 5x^5
                    if y == "1": #如果指数 =1    -x^1 + 5x^5 = -x + 5x^5
                        str1 += "-x"
                    elif y == "0" : #如果指数=0, -1x^0 + 5x^5 = -1 + 5x^5
                        str1 += "-1"
                    else:  #其余情况  -x^4 + 5x^5 = -x^4 + 5x^5
                        str1 += "-x^"+str(y)
                elif x < 0 or x>0 : # 6x^4 + 5x^5=6x^4+5x^5 或 -6x^4 + 5x^5 = -6x^4 + 5x^5
                    if y == "1": # 6x^1 + 5x^5=6x + 5x^5  或 -6x^1 + 5x^5 = -6x + 5x^5
                        str1 += str(x)+"x"
                    elif y == "0" : # 6x^0 + 5x^5=6 + 5x^5  或 -6x^0 + 5x^5 = -6 + 5x^5
                        str1 += str(x)
                    else:  #其余情况 6x^4 + 5x^5=6x^4 + 5x^5  或 -6x^4 + 5x^5 = -6x^4 + 5x^5
                        str1 += str(x)+"x^"+str(y)
            elif i!= 0: #不是第一项输出的时候
                # x > 0 的时候需要输出 + 号  6x^4 + 5x^5 = 6x^4 + 5x^5 这个需要输出+号
                #x < 0 的时候需要输出 - 号   6x^4 - 5x^5 = 6x^4 - 5x^5 这个需要输出-号
                if x == 1: #如果系数 = 1  6x^4 + 1x^5 = 6x^4 + x^5
                    if y == "1": #如果指数 =1 则不必输出指数  6x^4 + 1x^1 = 6x^4 + x
                        str1 += "+x"
                    elif y == "0" : #如果指数=0,则不必输出 6x^4 + 1x^0 = 6x^4 + 1
                        str1 += "+1"
                    else:  #  6x^4 + 1x^5 = 6x^4 + x^5
                        str1 += "+x^"+str(y)
                elif x == -1 : #x=-1 , 6x^4 -1x^5 = 6x^4 - x^5
                    if y == "1": # y=1 , 6x^4 -1x^1 = 6x^4 - x
                        str1 += "-x"
                    elif y == "0" : #如果指数=0,6x^4 -1x^0  = 6x^4 - 1
                        str1 += "-1"  # 1*x^0 =1
                    else:  #其余情况  6x^4 -1x^5 = 6x^4 - x^5
                        str1 += "-x^"+str(y)
                elif x < 0  : # 6x^4 - 5x^5 = 6x^4 - 5x^5 或 6x^4 + 5x^5 = 6x^4 + 5x^5
                    if y == "1": # 6x^4 - 5x^1 = 6x^4 - 5x 或 6x^4 + 5x^1 = 6x^4 + 5x
                        str1 += str(x)+"x"
                    elif y == "0" : # 6x^4 - 5x^0 = 6x^4 - 5 或 6x^4 + 5x^0 = 6x^4 + 5
                        str1 += str(x)
                    else:  # 6x^4 - 5x^4= 6x^4 - 5x^4 或 6x^4 + 5x^4 = 6x^4 + 5x^4
                        str1 += str(x)+"x^"+str(y)
                elif x > 0:
                    if y == "1": # 6x^4 - 5x^1 = 6x^4 - 5x 或 6x^4 + 5x^1 = 6x^4 + 5x
                        str1 += "+"+str(x)+"x"
                    elif y == "0" : # 6x^4 - 5x^0 = 6x^4 - 5 或 6x^4 + 5x^0 = 6x^4 + 5
                        str1 += "+"+str(x)
                    else:  # 6x^4 - 5x^4= 6x^4 - 5x^4 或 6x^4 + 5x^4 = 6x^4 + 5x^4
                        str1 += "+"+str(x)+"x^"+str(y)
    print(str1)

if __name__=="__main__":
    print("请按照这样的格式输入多项式的系数和指数:\n")
    print("假设你想输入的多项式为:0x^6+0x^4+5x^3-x^3+x^0+3\n")
    print("你可以这样输入:0,6,0,4,5,3,-1,3,1,0,3,0\n")
    print("注意:','要为英文状态下的输入\n")
    poly1 = input("请依次输入第一个多项式中的数值:")
    dict1 = dispose_data(poly1)
    poly2 = input("请依次输入第二个多项式中的数值:")
    dict2 = dispose_data(poly2)
    #将相加后的多项式的 key和value转化为 列表
    #假如:add_polynomial(dict1,dict2)返回的是:{'5': 14, '4': 12, '3': 18, '2': 14, '1': 4, '0': 6}
    #那么lis = [('5', 14), ('4', 12), ('3', 18), ('2', 14), ('1', 4), ('0', 6)]
    lis = list(add_polynomial(dict1,dict2).items())
    print_polynomial(lis)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值