多項式求值問題相信大家都不會陌生,我們日常生活中經常遇見類似的問題,比如 2+1+3*4/(5+5),看起來好像挺簡單的,但是如何用程式設計實現呢?如何讓計算機幫我們實現呢?這就是我們今天要討論的問題——多項式求值(中綴式求值)。
解題思路:
1.我們要用兩個棧來實現多項式求值問題。
<1>.第乙個棧用來儲存運算元。
<2>.第二個棧用來儲存操作符。
2.如何實現。
<1>.讀入我們的表示式。
<2>.遍歷表示式的各個項,並確定當前項是運算子還是運算元。
<3>.如果是運算元,直接壓入運算元棧。
<4>.如果是操作符,則分為兩種:
.如果當前操作符的優先順序大於操作符棧頂操作符的優先順序,則將當前操作符壓入操作符棧。繼續遍歷。
.如果當前操作符的優先順序小於操作符棧頂操作符的優先順序,則彈出操作符棧棧頂的操作符,並同時彈出兩個運算元,進行運算後,將結果壓入運算元棧,繼續比較操作符棧棧頂操作符與當前操作符的優先順序關係。。。
<5>.當表示式被全部遍歷完畢後,開始退棧,就是每次從操作符棧彈出乙個操作符,從運算元棧彈出兩個運算元,進行運算後將運算結果壓入運算元棧,左後操作符棧空時,運算元棧棧底的元素就是表示式的運算結果。
運算子優先順序表:
**實現:
兩個棧
//運算元棧
private stacknum = new stack<>();
//運算子棧
private stackoperator = new stack<>();
主方法
//表示式求值處理函式
public int operation(listexpression)
/*** 運算操作,運算元棧退兩個數,操作符棧退乙個符號
* 將運算得出的結果再壓入運算元棧的棧頂
*/private int clac() else if(sign.equals("-")) else if(sign.equals("*")) else if(sign.equals("/"))
num.push(result);
return result;
} /**
* 通過判斷運算子的優先順序關係,確定下一步操作
* @param flag
*/private void judge(string flag)
system.out.println("執行完成!");
}else if(operator_cmp.cmp(flag,operator.peek())==0) else if(operator_cmp.cmp(flag,operator.peek())==1) else if(operator_cmp.cmp(flag,operator.peek())==-1) }
//將表示式字串轉換成表示式中的每一項所組成的陣列
private listgetexpressionarr(string expression)
謝謝觀賞! 多項式求值
例2 8 多項式求值 考察多項式p x n cix i i 0 如果cn 0,則p 是乙個n 維多項式。下面程式可用來計算對於給定的值x,p x 的實際取值。假定根據f o r迴圈內部所執行的加和乘的次數來估算時間複雜性。可以使用維數n 作為例項特徵。進入f o r迴圈的總次數為n,每次迴圈執行1次...
多項式求值
題目描述 學了數論後,小傑最近對整係數多項式在整點的取值感興趣,他現在來求助你幫他計算。乙個整係數多項式通常表示為f x a0 a1x a2x2 a3x3 anxn,其中ai i 0,1,2,n 為整數。給定x z,求出f x mod1000000007。輸入描述 多組讀入。每組的第一行,表示多項式...
多項式求值
輸入的第一行為乙個整數 m m 1 leq m 181 m 18 表示多項式共有 m m 項。之後輸入 m m 行,每行有兩個元素,分別表示多項式各項的係數 c c 與次數 e e 1 leq c i 1001 ci 10 0,1 leq n 251 n 25 最後一行為待求多項式的變數值 x 0x...