1. 程式人生 > >兩個一元多項式相加

兩個一元多項式相加

程式執行結果如下:
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></span>
# include<stdlib.h>
struct node
{
	int exp;
	float coef;
	struct node *next; /*指向結構體指標*/ 
};
typedef struct node ListNode;
ListNode *createpoly() //建立多項式連結串列 
{
  ListNode *h=NULL,*p,*q=NULL;
  int e;
  float c;
  printf("請輸入係數和指數:");
  scanf("%f,%d",&c,&e);
  while(e!=0||c!=0)
  {
  	p=(ListNode*)malloc(sizeof(ListNode));
  	p->coef=c;
  	p->exp=e;
  	p->next=NULL;
  	if(h==NULL)
  	h=p;
  	else
  	q->next=p;
  	q=p;
  	printf("請輸入係數和指數:");
  	scanf("%f,%d",&c,&e);
	  }	
	  return h;
}
void disppoly(ListNode *h)
/*輸出多項式*/
{
	ListNode *p;
	p=h;
	while(p!=NULL)
	{
		if(p->exp==0)
		printf("%.2f",p->coef);
		else
		printf("%fx^%d",p->coef,p->exp);
		p=p->next;
		if(p!=NULL)
		printf("+");
	}
	printf("\n");
 } 
 ListNode *addpoly(ListNode *h1,ListNode *h2)
 /*將兩個多項式相加*/
 {
 	ListNode *p,*r=NULL,*s1,*s2,*s=NULL;
 	float c;
 	int e;
 	s1=h1;
 	s2=h2;
 	while(s1!=NULL&&s2!=NULL)
 	{
 		if(s1->exp==s2->exp)
 		{
 			c=s1->coef+s2->coef;
 			e=s1->exp;
 			s1=s1->next;
 			s2=s2->next;
		 }
		 else if(s1->exp>s2->exp)
		 {
		 	c=s1->coef;
		 	e=s1->exp;
		 	s1=s1->next;
		 }
		 else
		 {c=s2->coef;
		 e=s2->exp;
		 s2=s2->next;
		 }
		 if(c!=0)
		 {
		 	p=(ListNode*)malloc(sizeof(ListNode));
		 	p->coef=c;
		 	p->exp=e;p->next=NULL;
		 	if(s==NULL)
		 	s=p;
		 	else
		 	r->next=p;
		 	r=p;
		 }
	 }
	 while(s1!=NULL)
	 {
	 	c=s1->coef;
	 	e=s1->exp;
	 	s1=s1->next;
	 	if(c!=0)
	 	{
	 		p=(ListNode*)malloc(sizeof(ListNode));
		 	p->coef=c;
		 	p->exp=e;p->next=NULL;
		 	if(s==NULL)
		 	s=p;
		 	else
		 	r->next=p;
		 	r=p;
		 }
	 }
	 while(s2!=NULL)
	 {
	 	c=s2->coef;
	 	e=s2->exp;
	 	s2=s2->next;
	 	if(c!=0)
	 	{
	 		p=(ListNode*)malloc(sizeof(ListNode));
		 	p->coef=c;
		 	p->exp=e;p->next=NULL;
		 	if(s==NULL)
		 	s=p;
		 	else
		 	r->next=p;
		 	r=p;
		 }
	 }
	 return s;
  } 
void deletepoly(ListNode *h)
//釋放多項式所佔的記憶體單元 
{
	ListNode *p,*r=h;
	while(r!=NULL)
	{
		p=r->next;
		free(r);
		r=p;
	}
}
int main()
{
	ListNode *head1,*head2,*head;
	printf("建立第一個多項式:\n"); 
	head1=createpoly();
	printf("建立第二個多項式:\n");
	head2=createpoly();
	printf("將兩個多項式相加:\n");
	head=addpoly(head1,head2);
	disppoly(head);
	deletepoly(head);
}
  </span>

相關推薦

一元多項式相加

程式執行結果如下:<span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"># include<stdio.h></

一元多項式相加(連結串列 || 順序表實現)

順序表實現: #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <map> using

資料結構 一元稀疏多項式 利用鏈式儲存實現儲存一元多項式,並計算一元多項式之和

一、實驗原理 利用鏈式儲存實現儲存一元多項式,並計算兩個一元多項式之和。一元多項式由係數和指數構成。 1、create()儲存係數指數:首先建立一個頭結點headLnode,從headLnode->next開始存入係數和指數,只有係數是0時,才表示這個多項式的結束,否

利用結點資料型別,求一元多項式的和

# include <stdio.h> # include <malloc.h> # include <stdlib.h> typedef struct  PNode {   int  coef;   int  exp;   struct

Add Two Numbers 連結串列相加 python

描述: You are given two linked lists representing two non-negative numbers. The digits are stored in reverseorder and each of their nodes contain a si

Java中byte型別相加結果賦值給byte型別的變數會報編譯錯誤,byte加byte的結果為什麼是int?

背景: 之前偶然看到有討論這個問題,在網上搜了半天,結果都不盡如人意,解釋沒有到位, 有的說byte加byte預設就是int,那為什麼這麼做呢? 這不是找麻煩麼?這種奇怪的預設還有哪些?帶來一些列疑問。。。。。。 有的說byte儲存的就是整型資料,這種說法的對錯姑且不論,至少我覺得難免有

LeetCode刷題Easy篇二進位制字串相加,“和”也是二進位制字串

題目 Given two binary strings, return their sum (also a binary string). The input strings are both non-empty and contains only characters&

C#連結串列相加求和

您將獲得兩個非空連結串列,表示兩個非負整數。 數字以相反的順序儲存,每個節點包含一個數字。 新增兩個數字並將其作為連結列表返回。 您可以假設這兩個數字不包含任何前導零,除了數字0本身。 Input: (2 -> 4 -> 3) + (5 -> 6 ->

線性表--一元多項式相加

任務:本程式是一個控制檯程式,使用者可以根據自己的需求輸入兩個一元多項式,並且能夠實現顯示兩個多項式,再將這兩個多項式相加,輸出結果。 注意:本程式的輸入需求是按照指數的從小到大進行輸入,並且項數必須為正整數,指數需為整數,係數為雙精度型且不能為0。 具體程式碼如下: #include

稀疏矩陣的三元組表示的實現及應用(2)——採用三元組儲存稀疏矩陣,設計稀疏矩陣相加的運算演算法

/* *Copyright (c) 2015 , 煙臺大學計算機學院 *All right resvered . *檔名稱: 稀疏矩陣.cpp *作 者: 鄭兆涵 *稀疏矩陣的三元組表示的實現及應用(2) */ 問題:稀疏矩

利用稀疏矩陣的“三元組表”儲存結構,實現矩陣的相加

#include<iostream> #include<conio.h> #include<iomanip> using namespace std; const int MAXSIZE = 50; typedef int ElemTyp

連結串列相加的和445. Add Two Numbers II

題目: You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of

一元多項式相加

package Linear; /* * 一元多項式相加:ha指向表頭結點,hb指向表頭結點,將倆多項式相加,並加入p表。 * * 補充知識點: * 釋放p結點操作 1、Node t=p; t=null; */ public class C { public static voi

超大整數相加(c++)

昨天面試有個題,時間太緊,來不及寫了,回家除錯一下: 函式原型 bool add(const char *A, const char *B, char * dest); 思路: 模擬人工加法的過程,先從末尾開始加。如果存在進位,則標記 #include <iostre

一元多項式相加的鏈式實現

#include"PLOY.h" #include<stdio.h> #include<stdlib.h> #include<assert.h> //動態申請結點 NODE * alloc_node(int coef,int exp) {

node.JS中將字串進行相加

有時候伺服器返回的資料是字串型別,需要轉化成int或是float型進行相加然後格式就是以下的: <div class="mt5">總數:<%= parseInt(entRet.ls

超大整數相加

用字串處理數值運算 總體思想:按照小學算術運算計算,按位運算從陣列最高位,一個個的取出來相加(當然的先把單個字元轉換為整型),記住進位,迴圈計算 需要做的事情: (1)判斷輸入的字串是否為數字(特別要考慮小數點,如果做除法,被除數不能為0) (2)

php 將陣列進行相加

剛剛在網上看到一個提問. 陣列Array ( [0] => 1 [1] => 2 )和陣列Array ( [0] => 5 [1] => 6 ) 怎麼讓他們想加得出: 陣列Array ( [0] => 6 [1] => 8 ) 下面給

超大數相加演算法

#include <stdio.h> #include <string.h> #include <stdlib.h> /*********************

一元多項式相加的演算法和C++實現

利用順序表的鏈式儲存實現一元多項式的加法 一、資料結構 <span style="font-size:18px;">struct PolyNode { float coef; //多項式的係數 int expn; //多項式的指數 PolyNod