Python实现一元多项式的相加相乘运算

自己亲手写的,没有参考,写了改改了写。个人感觉c语言版本的会更好些,因为多个指针,Python用链表自己就是多设了头结点,然后只用各个节点的指针来实现。

class ListNode:
def init(self, x, y):
self.c = x
self.e = y
self.next = None
class Solution:
def ReadandLink(self,N):

    self.N=N

    a0=ListNode(0,0)
    a0.next=None
    c0=a0
    for i in range(1,N+1):
        c=int(input("系数:"))
        e=int(input("指数:"))
        b0=ListNode(c,e)
        a0.next=b0
        a0=b0
    return  c0   

def add(head1,head2):

   node1=head1.next
   node2=head2.next
   add0=ListNode(0,0)
   add0.next=None
   head3=add0
   while(node1!=None and node2!=None):

       if(node1.e==node2.e ):
           add1=ListNode(node1.c+node2.c,node1.e)
           add0.next=add1
           add0=add1
           node1=node1.next
           node2=node2.next

       elif(node1.e>node2.e  ):
           add1=ListNode(node1.c,node1.e)
           add0.next=add1
           add0=add1
           if(node1.next!=None):
               node1=node1.next
           else:
               node1=node1.next
               break
       elif(node1.e<node2.e):
           add1=ListNode(node2.c,node2.e)
           add0.next=add1
           add0=add1
           if(node2.next!=None):
               node2=node2.next
           else:
               node2=node2.next
               break

   while(node1==None and node2!=None):
        add1=ListNode(node2.c,node2.e)
        add0.next=add1
        add0=add1
        if(node2.next!=None):
               node2=node2.next
        else:
               break
   while(node2==None and node1!=None):
        add1=ListNode(node1.c,node1.e)
        add0.next=add1
        add0=add1
        if(node1.next!=None):
               node1=node1.next
        else:
               break
   return head3

def multi(head1,head2):
multi_node1=head1.next
multi_node2=head2.next

add_two=ListNode(0,0)
add_two.next=None

while( multi_node1!=None):
multi0=ListNode(0,0)
multi0.next=None
head4=multi0

   while(multi_node2!=None):
       multi_c=multi_node1.c*multi_node2.c
       multi_e=multi_node1.e+multi_node2.e
       multi1=ListNode(multi_c,multi_e)
       multi0.next=multi1
       multi0 = multi1
       multi_node2=multi_node2.next

   multi_node2=head2.next
   multi_node1=multi_node1.next
   add_two=add(add_two,head4)

return add_two

t1=Solution()
t2=Solution()
N1=int(input("多项式的项数:"))
head1=t1.ReadandLink(N1)
N2=int(input("多项式的项数:"))
head2=t2.ReadandLink(N2)
head3=add(head1,head2)
first=head3.next
print("加和结果")
while(first!=None):
print("系数=%d 指数等于%d"%(first.c,first.e))

first=first.next

head4=multi(head1,head2)
second=head4.next
print("乘积结果")
while(second!=None):

print("系数=%d 指数等于%d"%(second.c,second.e))

second=second.next

原文地址:https://blog.51cto.com/13930723/2363803

时间: 2024-08-30 12:11:52

Python实现一元多项式的相加相乘运算的相关文章

大数相加相乘及阶乘

大数的相加相乘和阶乘操作都可能会导致结果的溢出,可以把它们转换成字符串,再进行运算,这里需要注意的是,习惯上的加法乘法运算都是从低位开始运算的,先计算个位,个位向高位进位,依次进行直到最高位.字符串表示一个数字的时候如"3476",它的低位数字在最大下标处,为了与习惯上的操作保持一致,可以先把字符串反转,求出结果之后再把结果反转回来即可.接下来的加法操作就使用了反转的方法,乘法操作也可以使用类似的反转,但本文的乘法操作没有使用反转.计算出的结果可以保存在字符串中,也可以保存在整型的数组

SOJ 1002/1003/1004 大整数相加/相乘/相除

三个题目分别考察大整数相加相乘相除运算.如果按照传统算法是取一个长数组,之后进行模拟或者FFT来进行运算.但是相对繁琐. 后来昨天的青岛区域赛网赛1001,用到了JAVA的BigDecimal,于是反过来想到了这几个题目.用JAVA写了以后果然很简单. 1002:大数相加: AC代码: import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { // TO

一元多项式的相加(单链表的应用)

一元多项式的相加,基于单链表的结构上实现的. 单链表的结点结构定义为: typedef struct _NODE{ int coef; int exp; struct _NODE *next;}NODE: 第一个变量指的是系数,第二个变量指的是指数,x^7系数为1,指数为7 第三个变量next指针,将结点连接起来. 比如a1 = x^5+x^4+x^2+3    a2 = x^7+x^4+x+8 a1+a2 = x^7+x^5+2x^4+x^2+x+11 list.h 里面包含了一些对单链表进行

一道 google曾出过的笔试题:编程实现对数学一元多项式的相加和相乘操作(1)

数学中一元n次多项式可表示成如下的形式: Pn(x)=p0+p1x+p2x^2+…+pnx^n     (最多有 n+1 项,n +1 个系数唯一确定她) (1)请设计一套接口用以表示和操作一元多项式 (2)根据上述设计实现一元n次多项式的加法运算 (3)根据上述设计实现一元n次多项式的乘法运算 分析:  题目大概意思: 数学里常见的一元 n 次表达式,设计出加减乘除的函数(方法),同时提供对外接口,把内部实现封装起来,而 n 的大小没有指定. 问题的本质: 就是一系列的单个未知数 x,指数和系

python基础8 数据类型和数据运算

本节内容: 数据类型 数据运算 入门拾遗 参考网页 数据类型 数字 int(整型) 在32位机器上,整数的位数为32位,取值范围为-231-231-1,即-2147483648-2147483647 在64位系统上,整数的位数为64位,取值范围为-263-263-1,即-9223372036854775808-9223372036854775807 long(长整型) 跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长

Python基础-lambda表达式与三元运算

一.lambda表达式 1 >>> def add(x,y): #定义一个加法函数 2 return x+y #返回两个参数的相加的值 3 4 >>> z=f(3,4) 5 >>> print(z) 6 7 #调用加法函数返回7 7 >>> lambda x,y:x+y 8 <function <lambda> at 0x0000020F385B86A8> 9 #可以看到lambda是一个 function(函

python写的大整数相乘的方法

输入 72106547548473106236 982161082972751393 两个大整数 输出结果 70820244829634538040848656466105986748 解题思路 首先根据 大整数相乘的原理的基础上,把大整数进行优化拆分,拆分的长度,要考虑语言中整形的长度.这里用的python,其实可以直接乘的,呵呵.我暂定设为了 4,也就是 说 7210 6547 5484 7310 6236 98 2161 0829 7275 1393 然后 逐份相乘,当然千万别忘了结果要补

python魔法方法-反射运算和增量运算

反射运算 什么是反射运算符,其实就是反转了两个对象,下面先看一个普通运行符的实现: class Foo(object): def __init__(self, x): self.x = x def __add__(self, other): return 'Foo:%s + %s' % (self.x, other.x) class Boo(object): def __init__(self, x): self.x = x def __add__(self, other): return 'B

Python内置函数_数学运算类

本文和大家分享的主要是python内置函数数据运算类相关内容,一起来看看吧,希望对大家学习python 有所帮助. abs abs(x) 求绝对值 · X可以是整型,也可以是复数 · 若X是复数,则返回复数的模 >>> abs(-1)1>>> abs(-3+4j)5.0>>> bin bin(x) 将整数x转换为二进制字符串 >>> bin(2)'0b10'>>> bin(3)'0b11' bool bool([x]