[恢]hdu 1237

笑着哭i 提交于 2020-04-07 07:43:41

2011-12-25 15:48:22

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1237

题意:中文。

mark:用递归替代栈。1WA。开始没考虑到1 - 2 + 2的情况。把2+2先算了。。。

代码:

# include <stdio.h># include <string.h>char str[1010] ;double num[1010] ;char op[1010] ;int cnt ;void getWord (){    double buff = 0 ;    int i, flag = 0 ;    for (i = 0 ; str[i] ; i++)    {        if (flag == 0)        {            if (str[i] == ' ')            {                flag = 1 ;                num[cnt] = buff ;            }            else buff = buff * 10 + (str[i] -'0') ;        }        else        {            op[cnt++] = str[i] ;            buff = 0 ;            i++ ;            flag = 0 ;        }    }    num[cnt] = buff ;}double fun(double a, double b, char op){    double ans ;    switch (op)    {        case '+':ans = a+b ; break ;        case '-':ans = a-b ; break ;        case '*':ans = a*b ; break ;        case '/':ans = a/b ; break ;    }    return ans ;}double calc(int n){    if (n == cnt-1)        return fun(num[n], num[n+1], op[n]) ;    if (op[n] == '+')        return fun(num[n], calc(n+1), op[n]) ;    if (op[n] == '-')    {        num[n+1] = -num[n+1] ;        op[n] = '+' ;        return fun(num[n], calc(n+1), op[n]) ;    }    num[n+1] = fun(num[n], num[n+1], op[n]) ;    return calc(n+1) ;}double gao(){    cnt = 0 ;    getWord() ;    return calc(0) ; ;}int main (){    while (gets(str) && strcmp (str, "0"))        printf ("%.2lf\n", gao()) ;    return 0 ;}



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!