傳送
這個題讓你通過自己的努力,來寫乙個可以解一元一次方程的計算題(麻麻再也不用擔心我計算錯了qwq)
我們先學習一下一元一次方程的解法
step1:移項。把帶有未知數的項移到方程的一邊,把常數項移到方程的另一邊。
step2:係數化一。方程左右兩邊同時除以未知數的係數
step3:寫答(最後別忘了輸出是"未知數=....."的格式)
解方程都會,關鍵是怎麼讓電腦進行移項。我們在解方程的時候通常把未知數移到左邊,常數移到右邊,並且在等號右邊含有未知數的項是要變號的,在等號左邊常數項要變號。所以我們在計算未知數的係數與常數時,可以以等號為劃分點,進行計算。
方程用字串的形式讀入,我們也注意到,每一項的起點是發現「+「 」-」 「=」,終點也是如此。所以我們在沒有掃瞄到符號或未知數時,就繼續計算當前項的絕對值,當掃瞄到下乙個符號的時候,就將算好的值按照符號與是否掃瞄過等號累加(這裡分別用k,v記錄未知數的係數和所有常數項的和)
v/k的值即為答案,注意ans如果是-0,要特判,輸出正0(雖然這倆沒毛區別,但評測機說你錯了你就錯了)
一些小坑見**
#include#include#include
#include
#include
using
namespace
std;
char a[1000],c,aa;//
aa記錄未知數是什麼字元
intm,k,q,v;
bool dy,xs;//
dy標記是否掃瞄過等號,xs標記是否是含未知數的項(係數)
intmain()
else}//
注意若未知數前面不寫係數,則係數是1
elseelse}
}if(!dy)//
等號左邊的項
else}
elseelse}
}if(a[i]=='
=')dy=1;//
注意這些的更新順序
c=a[i]; //
記錄符號
xs=0
; }
else
if(a[i]>='
0'&&a[i]<='
9') //
只有是數字的字元才計算
else
}if(xs)//
最後一項掃瞄不到,要補上
else
double
ans;
if(k!=0
) ans=1.0*v/k;
else ans=0.000
;
if(ans==-0)ans=0
; cout
<"
="; printf("
%.3lf
",ans);
}
打了好久qwq
P1022 計算器的改良
nclncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。為了很好的完成這個任務,zlzl先生首先研究了一些一元一次方程的例項 4 3x 84 3x 8 6a ...
P1022 計算器的改良
nclncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。為了很好的完成這個任務,zlzl先生首先研究了一些一元一次方程的例項 4 3x 84 3x 8 6a ...
P1022 計算器的改良
ncl是一家專門從事計算器改良與公升級的實驗室,最近該實驗室收到了某公司所委託的乙個任務 需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任務交給了乙個剛進入的新手zl先生。為了很好的完成這個任務,zl先生首先研究了一些一元一次方程的例項 4 3x 8 6a 5 1 2 2a 5 ...