ZCMU 1127: 第三章:再見,林靜!

1127: 第三章:再見,林靜!

Description
鄭薇的專業是土木工程,理工科的女生原本就是珍稀動物,而且大多數都長得比較抽象。想她鄭微雖然不是什麼絕代美女,跟她漂亮的媽媽相比也有一定差距,但她有一張討喜的圓臉,小巧的尖下巴,大而靈動的眼睛,秀氣挺直的鼻子,尤其是皮膚白皙無瑕——這是媽媽也承認自己年輕的時候也比不上的。因此,根據鄭微自己無數次攬鏡自照的鑑定結果,她絕對稱得上是人見人愛、花見花開的美少女,簡直就是瓊瑤阿姨筆下的女主角。雖然瓊瑤阿姨的小說已經落伍幾個世紀了,但阿姨的審美觀還是歷久彌新的,看她挑中的連續劇女主角一個比一個紅就知道了。就連一向很少夸人的林靜也曾說過鄭微不說話的時候還是相當有迷惑性的,稱得上“靜若處子”。當然,鄭微很自覺地過濾掉了他後半句“動若瘋兔”的評價,完全當做他對她的肯定。如今想起林靜,她的臉上只是微微一笑。

生性豁達的鄭薇,埋藏起自己的愛情,開始過上大學時代的忙碌生活。
土木工程的數學題:給定一些沒有括號的四則運算表達式,求其結果。

Input
輸入數據中含有一些表達式(數量≤1000,長度按含有的運算計,運算符≤30),表達式的運算符只含有加、減、乘、除。表達式中每個數的精度範圍在double型內,表達式中沒有任何其他運算符,沒有括號。

Output
對每個表達式,計算其結果。按科學計數法輸出,精度按6位小數,每個結果應占獨立一行。如果表達式發生除0的情況,則對該表達式直接輸出“DivByZero”。

Sample Input

3+5.0
6-2*7
6-2/0
3+5*6+1
3+5+1*7
1+2-3*4+5/6-4*3*2*1*1+2+3+4+5

Sample Output

8.000000e+00
-8.000000e+00
DivByZero
3.400000e+01
1.500000e+01
-1.816667e+01

HINT
輸出結果請使用printf("%e\n",ans);或者cout<<scientific<<ans<<endl;
原本想用字符串讀入來一下的結果發現5.0這個數限制了我的想象= =有點麻煩用字符串 要單獨判斷符號
然後關於stringstream可以看這個https://blog.csdn.net/jnxxhzz/article/details/53581179

在我的理解裏,這兩種字符流類的區別就是

istringstream可以用>>操作進行分步讀取

ostringstream可以用<<操作進行分步輸出

stringstream既可以使用<<操作也可以使用>>操作

記憶非常簡單,一個是input輸入,一個是output輸出,這樣說的話應該就理解了吧?
Code:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    while(cin>>s)
    {
        double num[55];
        char oper[50];
        stringstream st(s);
        double n;
        char c;
        int k = 0,j = 0,flag = 1;
        st>>n;
        num[k++] = n;
        while(st>>c>>n)
        {
            if(c == '*'|| c == '/')
            {
                if(c == '*')
                    num[k-1] *= n;
                else
                {
                    if(n == 0)
                    {
                        flag = 0;
                        break;
                    }
                    num[k-1] /= n;
                }
            }
            else
            {
                oper[j++] = c;
                num[k++] = n;
            }
        }
        if(flag)
        {
            double ans = num[0];
            for(int i = 0; i < j; i++)
            {
                if(oper[i] == '+')
                    ans += num[i+1];
                else
                    ans -= num[i+1];
            }
            printf("%e\n",ans);
        }
        else
            cout<<"DivByZero"<<endl;
    }
    return 0;
}

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