入門oj 1173: [Noip2000]計算器的改良

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章