題意
傳送門 nc 16657
題解驗證表示式的等價性,考慮代入多組素數進行判斷,防止溢位還要模乙個大素數。
對於表示式的求解,先用棧預處理多餘的括號;然後按照操作符的優先順序遞迴求解,操作符優先順序越低的越先處理,這樣保證回溯時滿足操作符越高的越優先計算;對於二元運算子,只記錄出現在括號外的部分,對於單獨的括號表示式再拆括號,以保證括號計算的正確性;相同優先順序的二元運算子先處理出現在表示式最末的,以保證相同優先順序從左到右順序計算。
#include
using
namespace std;
#define mod 1000000007
typedef
long
long ll;
int a, m =
10, rec[10]
;int test[10]
=;string s;
ll qpow
(ll x, ll n)
return res;
}ll number
(int i,
int j)
ll calc
(int i,
int j)}if
(add !=-1
&& s[add]
=='+'
)return
(calc
(i, add -1)
+calc
(add +
1, j)
)% mod;
if(add !=-1
&& s[add]
=='-'
)return
(calc
(i, add -1)
-calc
(add +
1, j)
)% mod;
if(mul !=-1
&& s[mul]
=='*'
)return
(calc
(i, mul -1)
*calc
(mul +
1, j)
)% mod;
if(mul !=-1
&& s[mul]
=='/'
)return
(calc
(i, mul -1)
/calc
(mul +
1, j)
)% mod;
if(pow !=-1
)return
qpow
(calc
(i, pow -1)
,calc
(pow +
1, j));
if(s[i]
=='('
&& s[j]
==')'
)return
calc
(i +
1, j -1)
;return
number
(i, j);}
void
pre()}
while
(!id.
empty()
)}intmain()
int n;
cin >> n;
cin.
get();
for(
int i =
0; i < n; i++)}
if(f) cout <<
char
(i +
'a');}
cout << endl;
return0;
}
中綴表示式
實現 直接計算中綴表示式 不含括號 include include includeusing namespace std 運算符號優先順序比較 加減為低階運算,乘除是高階運算 先算乘除 return 1 means can calculate,else can not.int getpriority...
中綴表示式
輸入乙個中綴表示式 由 0 9組成的運算數 加 減 乘 除 四種運算子 左右小括號組成。注意 也可作為負數的標誌,表示式以 作為結束符 判斷表示式是否合法,如果不合法,請輸出 no 否則請把表示式轉換成字尾形式,再求出字尾表示式的值並輸出。注意 必須用棧操作,不能直接輸出表示式的值。輸入格式 第一行...
中綴表示式 字尾表示式
中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...