【问题描述】
编写一个程序实现两个一元多项式相加的运算。
【输入形式】
从当前目录下的poly.in文件读入两行以空格分隔的整数,每一行代表一个多项式,且该多项式中各项的系数均为0或正整数,最高幂次不超过50。对于多项式(n<=50)的表示方法如下:
an n an-1 n-1 … a1 1 a0 0
即相邻两个整数分别表示表达式中一项的系数和指数。在输入文件中只出现系数不为0的项。
【输出形式】
将运算结果输出到当前目录下的poly.out文件中。将系数不为0的项按指数从高到低的顺序输出,每次输出其系数和指数,均以空格分隔。在行的末尾输出一个回车符。
【输入文件】
54 8 2 6 7 3 25 1 78 0
43 7 4 2 8 1
【输出文件】
54 8 43 7 2 6 7 3 4 2 33 1 78 0
【样例说明】
输入文件的两行分别代表了表达式54x8+2x6+7x3+25x+78+43x7+4x2+8x其和为54x8+43x7+2x6+7x3+4x2+33x+78
f = open('poly.in')
line = f.readline()
list_line = [line.split()]
line = f.readline()
list_line.append(line.split())
dict_record = {}
for i in range(len(list_line[0]) - 1): # 储存第一行
if i % 2 == 0: # i+1=key=幂次, i=value=系数
dict_record.update({int(list_line[0][i + 1]): int(list_line[0][i])})
for i in range(1, len(list_line[1])): # 储存第二行
if i % 2 == 1: # 获取,i=幂次,i-1=系数
if int(list_line[1][i]) in dict_record.keys(): # 幂次存在
for key, value in dict_record.items(): # 幂次已经存在,系数改变
if key == int(list_line[1][i]): # key值相同
dict_record[key] = value + int(list_line[1][i - 1]) # value + 另一个值
elif int(list_line[1][i]) not in dict_record.keys(): # 幂次不存在
dict_record.update({int(list_line[1][i]): int(list_line[1][i - 1])}) # 更新字典
# 根据key 排序
dict_record = dict(sorted(dict_record.items(), key=lambda x: x[0], reverse=True))
g = open('poly.out', 'a')
g.seek(0) # 定位
g.truncate() # 从定位起置空
t = len(dict_record) # 获取字典长度,为添加空格做准备
count = 1
for key, value in dict_record.items():
g.write(str(value)) # 转为字符写入
g.write(' ') # 添加空格
g.write(str(key))
if count < t: # 判断输入空格
count += 1
g.write(' ')
else:
break
g.write('\n')
f.close()
g.close()