青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

CSU OJ - 1183: 計算表達式的值

   題目意思很簡單就是計算含括號的四則運算表達式的值。這個題目很坑爹,剛做的時候,題目描述里面只說里面會有空格,
后面居然把題目描述改了。所以,這個題無論怎么改,都是不對。因為,不知道是哪個坑爹的出題人,把數據里面加了\t,
難道出題人以為\t也是空格。估計,后面修改題目描述,也是發現這個問題后才改的。這可是還是哥了,改了無數多遍,
不處理非法數據就超時,略過非常數據當然直接WA了。好坑爹。
   計算表達式的值,以前嚴蔚敏書上就說用棧構造出來后綴表達式后再計算值。但是這個方法未免太那個了,首先太麻煩了,
雖然算法思路不麻煩。我的做法是直接遞歸計算即可。碰到左括號遞歸計算新的表達式,右括號作為函數終止條件。否則,按照
四則運算的優先級計算當前的表達式。遞歸算法中需要記錄前一個運算符合的優先級,如果前一個運算符的優先級比現在碰到的
運算符的優先級高,那么就應該直接返回答案了
,當前碰到的運算符的計算交給下一次循環好了。

   代碼如下:

#include <stdio.h>
#define MAX (100 + 10)
char szData[MAX];

void TrimSpace(char* pszData)
{
    char* pszRead = pszData;
    char* pszWrite = pszData;
    while (*pszRead)
    {
        //由于數據中有\t,與先前題目描述不符合,不處理掉就直接超時了
        if (*pszRead != ' ' && *pszRead != '\t')
        {
            *pszWrite++ = *pszRead;
        }
        ++pszRead;
    }
    *pszWrite = '\0';
}

//nKind代表前一個運算符合的優先級,開始時是0,+-是1,*/是2
double Cal(char*& pszData, int nKind)
{
    double fAns = 0.0;
    while (*pszData && *pszData != ')')//表達式終止的條件是到達'\0'或者碰到右括號
    {
        if (*pszData >= '0' && *pszData <= '9')
        {
            fAns = 10 * fAns + *pszData - '0';
            ++pszData;
        }
        else if (*pszData == '+')
        {
            if (nKind >= 1)
            {
                return fAns;
            }
            ++pszData;
            fAns += Cal(pszData, 1);
        }
        else if (*pszData == '-')
        {
            if (nKind >= 1)
            {
                return fAns;
            }
            ++pszData;
            fAns -= Cal(pszData, 1);
        }
        else if (*pszData == '*')
        {
            if (nKind >= 2)
            {
                return fAns;
            }
            ++pszData;
            fAns *= Cal(pszData, 2);
        }
        else if (*pszData == '/')
        {
            if (nKind >= 2)
            {
                return fAns;
            }
            ++pszData;
            fAns /= Cal(pszData, 2);
        }
        else if (*pszData == '(')
        {
            ++pszData;
            fAns = Cal(pszData, 0);
            ++pszData;//移到')'后面
            return fAns;//一個括號內的是一個完整的表達式,因此直接返回
        }
    }
    
    return fAns;
}

int main()
{
    while (gets(szData))
    {
        TrimSpace(szData);
        char* pszData = szData;
        printf("%.4f\n", Cal(pszData, 0));
    }
}
   一個遞歸函數能計算出表達式的值,而且能處理優先級和括號,如果是以前的話,我應該是寫不出來的。再把算法的實現細節改改,
應該也能計算出浮點數的表達式了。
   

posted on 2012-03-19 16:26 yx 閱讀(1532) 評論(1)  編輯 收藏 引用 所屬分類: 模擬

評論

# re: CSU OJ - 1183: 計算表達式的值 2013-02-20 10:35 LimitSY

3+5*9/1+(-5*6+4*2-4*(2/1+5-(2+3+(-5*2)-4)+4)*3)/2  回復  更多評論   

<2025年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

導航

統計

公告

常用鏈接

留言簿(3)

隨筆分類

隨筆檔案

me

好友

同學

網友

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品永久免费在线| 亚洲九九爱视频| 99视频有精品| 欧美激情黄色片| 欧美电影电视剧在线观看| 麻豆精品在线视频| 欧美高清不卡| 亚洲精品少妇网址| 99re66热这里只有精品3直播| 一本色道88久久加勒比精品| 亚洲主播在线观看| 久久精品人人做人人爽电影蜜月| 久久久噜噜噜久噜久久| 亚洲高清影视| 最近看过的日韩成人| 亚洲图片你懂的| 久久久久久高潮国产精品视| 中日韩视频在线观看| 欧美激情精品久久久久久久变态| 欧美黄色片免费观看| 亚洲国产成人tv| 中文精品视频| 久久综合狠狠综合久久综青草 | 欧美v日韩v国产v| 亚洲国产精品一区制服丝袜| 一二三区精品| 久久久久国产精品麻豆ai换脸| 欧美激情一级片一区二区| 国产精品久久久久aaaa樱花| 在线观看不卡| 欧美亚洲视频在线观看| 亚洲国产精品久久久久久女王| 亚洲综合国产| 欧美精品自拍| 国模精品娜娜一二三区| 亚洲免费视频观看| 亚洲伊人伊色伊影伊综合网| 亚洲欧美成人网| 蜜臀久久99精品久久久久久9| 亚洲精品一区二区三区樱花| 久久精彩免费视频| 欧美亚日韩国产aⅴ精品中极品| 黄色在线成人| 小黄鸭精品密入口导航| 亚洲欧洲精品一区二区三区| 欧美影院久久久| 国产精品xvideos88| av成人激情| 久久这里只有| 久久成人这里只有精品| 国产日产精品一区二区三区四区的观看方式 | 99pao成人国产永久免费视频| 一区二区三区高清| 一区国产精品| 一区二区三区视频观看| 久热精品在线视频| 亚洲欧美美女| 国产精品www色诱视频| 一区二区三区视频在线观看| 亚洲电影在线| 母乳一区在线观看| 亚洲精品久久久久中文字幕欢迎你| 久久久久久夜| 久久九九免费| 亚洲国产乱码最新视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 香蕉亚洲视频| 亚洲男人影院| 国产一区二区中文字幕免费看| 亚洲欧美制服另类日韩| 亚洲在线免费| 国产亚洲精品v| 久久夜色精品| 欧美二区在线看| 在线亚洲免费视频| 亚洲一区在线直播| 国内久久婷婷综合| 狼狼综合久久久久综合网| 久久一区二区三区四区| 亚洲大片av| 99国产精品久久久久久久| 国产精品欧美久久| 久久精品国产亚洲5555| 久久影音先锋| 亚洲无线视频| 久久国产精品一区二区三区四区| 在线观看亚洲精品| 亚洲免费福利视频| 国产一区二区三区免费在线观看| 欧美成人激情在线| 欧美性久久久| 免费亚洲电影在线| 久久国产欧美日韩精品| 久久网站热最新地址| 亚洲高清视频一区二区| 亚洲激情另类| 国产精品国产成人国产三级| 久久九九99视频| 欧美成人午夜| 午夜久久久久久| 鲁大师成人一区二区三区| 中文成人激情娱乐网| 西西人体一区二区| 日韩亚洲欧美成人一区| 亚洲欧美一区二区精品久久久| 一色屋精品视频在线看| 99视频有精品| 亚洲日本中文字幕区| 性色一区二区| 亚洲一区二区三区久久| 免费中文字幕日韩欧美| 久久只精品国产| 国产伦精品一区二区三区视频黑人 | 一区二区三区精密机械公司| 性高湖久久久久久久久| 国产精品99久久久久久人 | 欧美成人69av| 久久亚洲国产精品一区二区| 欧美性理论片在线观看片免费| 欧美激情亚洲| 国产主播一区二区| 亚洲免费视频一区二区| 亚洲一区二区三区精品在线| 欧美成黄导航| 亚洲福利免费| 亚洲电影毛片| 久久久九九九九| 午夜精品视频一区| 欧美午夜影院| 一区二区激情| 亚洲午夜精品一区二区| 欧美 日韩 国产在线| 欧美不卡激情三级在线观看| 韩国一区电影| 欧美中文字幕精品| 久久久www| 国产亚洲网站| 久久精品国产99精品国产亚洲性色| 欧美一区二区三区免费大片| 国产精品美女久久福利网站| 这里只有精品视频在线| 在线中文字幕一区| 欧美人在线观看| 一区二区精品在线观看| 亚洲图片在线| 国产精品日本一区二区| 亚洲视频电影在线| 亚洲一区自拍| 国产亚洲成av人片在线观看桃| 午夜在线不卡| 精品盗摄一区二区三区| 欧美日韩国产成人在线观看| 国产日韩欧美综合一区| 亚洲一二三区在线| 欧美在线观看一区二区| 国产在线精品自拍| 久久久久久九九九九| 欧美a级片网| 亚洲精品男同| 欧美午夜一区二区| 久久国产66| 亚洲欧洲日本一区二区三区| 亚洲国产精品999| 欧美日韩国产综合视频在线观看| 一区二区三区导航| 久久久人人人| 亚洲激情视频在线观看| 欧美日韩综合在线| 欧美一区二区三区免费观看| 欧美aⅴ一区二区三区视频| 在线视频你懂得一区二区三区| 国产精品五区| 久久天堂av综合合色| 亚洲人成在线观看| 久久国产精品第一页| 亚洲日本免费| 国产在线不卡视频| 欧美色图首页| 久久久亚洲成人| 一区二区三区欧美| 欧美成人午夜剧场免费观看| 亚洲一区二区成人| 亚洲第一区中文99精品| 国产精品久久久久久久久久久久久| 久久成人资源| 亚洲婷婷综合久久一本伊一区| 欧美大胆成人| 久久国产高清| 亚洲图片欧洲图片av| 亚洲国产精品123| 国产亚洲成精品久久| 欧美日韩免费一区| 美女啪啪无遮挡免费久久网站| 亚洲欧美久久久| 中文国产成人精品| 亚洲美女视频| 亚洲经典三级| 欧美成人免费网站| 久久综合99re88久久爱| 欧美一区1区三区3区公司|