1173: [Noip2000]計算器的改良
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 86 Solved: 47
[Submit][Status][Web Board]
Description
NCL是一家專門從事計算器改良與升級的實驗室,最近該實驗室收到了某公司所委託
的一個任務:需要在該公司某型號的計算器上加上解一元一次方程的功能。實驗室將這個任
務交給了一個剛進入的新手ZL先生。爲了很好的完成這個任務,ZL先生首先研究了一些
一元一次方程的實例:
4+3x=8
6a-5+1=2-2a
-5+12Y=0
ZL先生被主管告之,在計算器上鍵入的一個一元一次方程中,只包含整數、小寫字母
及十、一、=這三個數學符號(當然,符號"一"既可作減號,也可作負號)。方程中並沒
有括號,也沒有除號,方程中的字母表示未知數。
問題求解:
編寫程序,解輸入的一元一次方程,將解方程的結果(精確至小數點後三位)輸出至屏幕。
你可假設對鍵入的方程的正確性的判斷是由另一個程序員在做,或者說可認爲鍵入的一
元一次方程均爲合法的,且有唯一實數解。
Input
Output
Sample Input
6a-5+1=2-2a
Sample Output
a=0.750
模擬題,要知道等號作業的狀態和符號的狀態,分析好情況然後處理
Code:
#include<stdio.h>
#include<math.h>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int main()
{
char s[1005];
cin>>s;
int l=strlen(s);
double xx=0,sum=0,abs=0;
int t=1,f=1;
char x;
for(int i=0; i<l; i++)
{
if(s[i]>='0'&&s[i]<='9')
{
sum=sum*10+s[i]-'0';
}
else
{
if(s[i]>='a'&&s[i]<='z'||s[i]>='A'&&s[i]<='Z')
{
x=s[i];
xx+=f*sum*t;
}
else
{
abs+=-1*f*sum*t;
if(s[i]=='-')
t=-1;
else
t=1;
if(s[i]=='=')
f=-1;
}
sum=0;
}
}
if(s[l-1]!=x)
abs+=-1*sum*t*f;
printf("%c=%.3lf\n",x,abs/xx);
return 0;
}