C#计算器(递归,WebService) 支持加减乘除括号等 (一)

public class Calculator : System.Web.Services.WebService
    {
        /// <summary>
        /// 实现混合运算
        /// </summary>
        /// <param name="content">表达式</param>
        /// <returns></returns>
        [WebMethod]
        public double parse(String content)
        {
            //标识括号
            int startIndex = content.LastIndexOf("(");
            if (startIndex != -1)
            {
                int endIndex = content.IndexOf(")", startIndex);
                int len = endIndex - startIndex - 1;
                double d = parse(content.Substring(startIndex + 1, len));
                return parse(content.Substring(0, startIndex) + d + content.Substring(endIndex + 1));
            }

            //标识运算符
            int index = content.IndexOf("+");
            if (index != -1)
            {
                return parse(content.Substring(0, index)) + parse(content.Substring(index + 1));
            }
            index = content.LastIndexOf("-");
            if (index != -1)
            {
                return parse(content.Substring(0, index)) - parse(content.Substring(index + 1));
            }
            index = content.IndexOf("*");
            if (index != -1)
            {
                return parse(content.Substring(0, index)) * parse(content.Substring(index + 1));
            }
            index = content.LastIndexOf("/");
            if (index != -1)
            {
                return parse(content.Substring(0, index)) / parse(content.Substring(index + 1));
            }
            return Double.Parse(content);

        }
    }


  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
递归是一种非常适合用来处理表达式的技术。要递归地编写一个包含加减乘除括号的算术表达式,可以按照以下步骤进行: 1. 定义表达式的语法 首先需要定义表达式的语法。在本例中,我们可以定义表达式的语法如下: 一个表达式可以是: - 一个数字 - 一个由两个表达式和一个运算符组成的表达式(如:(1+2)) - 一个由两个表达式和一个运算符组成的表达式,其中运算符为乘法或除法(如:2*3) 2. 实现递归函数 接下来,我们可以编写一个递归函数,该函数将检查表达式的语法,并在必要时递归调用自身来处理子表达式。函数应该按照以下步骤进行操作: - 如果表达式只包含一个数字,直接返回该数字。 - 如果表达式以左括号开头,找到与之对应的右括号,并将括号内的表达式递归地传递给自己。 - 如果表达式中包含乘法或除法运算符,将表达式拆分为两个子表达式,分别递归传递给自己,并将结果相乘或相除。 - 如果表达式中只包含加法或减法运算符,将表达式拆分为两个子表达式,分别递归传递给自己,并将结果相加或相减。 3. 处理错误情况 最后,需要处理可能出现的错误情况,例如表达式中缺少右括号或运算符。可以通过添加适当的错误处理代码来解决这些问题。 下面是一个使用递归编写包含加减乘除括号的算术表达式的示例代码(使用Python语言实现): ```python def evaluate(expr): # Check if the expression is a number if expr.isdigit(): return int(expr) # Check if the expression starts with a left parenthesis if expr[0] == '(': # Find the matching right parenthesis count = 0 for i in range(len(expr)): if expr[i] == '(': count += 1 elif expr[i] == ')': count -= 1 if count == 0: break # Evaluate the expression inside the parentheses return evaluate(expr[1:i]) + evaluate(expr[i+1:]) # Check if the expression contains multiplication or division if '*' in expr or '/' in expr: # Split the expression into two parts and evaluate them recursively for i in range(len(expr)): if expr[i] == '*': return evaluate(expr[:i]) * evaluate(expr[i+1:]) elif expr[i] == '/': return evaluate(expr[:i]) / evaluate(expr[i+1:]) # Evaluate the expression as addition or subtraction for i in range(len(expr)): if expr[i] == '+': return evaluate(expr[:i]) + evaluate(expr[i+1:]) elif expr[i] == '-': return evaluate(expr[:i]) - evaluate(expr[i+1:]) # If none of the above conditions are met, raise an error raise ValueError('Invalid expression: {}'.format(expr)) ``` 这个函数可以对包含加减乘除括号的算术表达式进行求值。例如,对于表达式"(2+3)*(4-1)",函数将返回15。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值