洛谷P1022 計算器的改良

2022-05-31 15:33:08 字數 1495 閱讀 6141

ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務:需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。

為了很好的完成這個任務,zlzl先生首先研究了一些一元一次方程的例項:

4+3x=8

6a-5+1=2-2a

-5+12y=0

zlzl先生被主管告之,在計算器上鍵入的乙個一元一次方程中,只包含整數、小寫字母及+、-、=這三個數學符號(當然,符號「-」既可作減號,也可作負號)。方程中並沒有括號,也沒有除號,方程中的字母表示未知數。

你可假設對鍵入的方程的正確性的判斷是由另乙個程式設計師在做,或者說可認為鍵入的一元一次方程均為合法的,且有唯一實數解。

乙個一元一次方程。

解方程的結果(精確至小數點後三位)。

輸入 #1複製

6a-5+1=2-2a

輸出 #1複製

a=0.750

#includeusing

namespace

std;

string

sentence;

int dl1,dl2,ta;//

係數&常數項

int xs(int n,int

t)int

main()

if(sentence[t]=='-'

)

if(sentence[t]>='

a'&&sentence[t]<='z'

)

if(sentence[t]<='

9'&&sentence[t]>='0'

)

else}}

cout

<"="

;

//double會出現-0的情況!

double ans= -dl2/(dl1*1.0

);

if(ans==-0.000) ans=0.000

; printf(

"%.3lf

",ans);

return0;

}

首先一次性讀入這個式子

再逐個判斷

遇到等號就把zf(正負)設為-1

(zf在迴圈前要設為1)

遇到減號/負號就把fh(符號)設為-1

(fh在每次迴圈開始時要初始化為1)

遇到數字就進入函式,返回這個數字串的實值

同時看下一位是不是字母,是的話就放到dl1(係數)裡,否則放到dl2(常數項)裡

最後移項(*-1)

係數化為一

double是有-0的!!!

這就是為什麼總有乙個點過不去,答案是0。000,一般程式則會輸出-0.000

所以加乙個特判

如果ans是-0.000,ans=0.000

很重要!!!

洛谷 P1022 計算器的改良

題目背景ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。題目描述 為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x 8 6a 5 ...

洛谷 P1022 計算器的改良

題目背景 ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。題目描述 為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x 8 6a 5...

洛谷 P1022 計算器的改良

題目 計算器的改良 思路 把方程以 為界拆成兩段,對於每一段假設前面沒有 號,就新增乙個 號,且每一段的結尾加乙個 號。再把兩段的未知數係數和常數項合併,移項,化係數為1求得。注意當常數項為0時要特殊處理,避免出現精度問題。includeusing namespace std string a in...