1条回答 默认 最新
- m0_54204465 2023-02-02 08:47关注
针对第三点:负数带括号的输出,可以先通过正则表达式等工具把输入的表达式字符串分析,再判断运算数是否为负数,如果是,则在前面加上括号。
针对第四点:处理除数为0的情况,可以在计算前判断右操作数是否为0,如果是,则输出"除数不能为0"。
以下是可行的代码实现,使用C#语言。
using System; using System.Text.RegularExpressions; namespace SimpleCalculator { class Program { static void Main(string[] args) { Console.WriteLine("请输入一个算术表达式:"); string expression = Console.ReadLine(); string pattern = @"(\d+)([\+\-\*\/])(\d+)"; Match match = Regex.Match(expression, pattern); if (match.Success) { int leftOperand = int.Parse(match.Groups[1].Value); char operatorChar = char.Parse(match.Groups[2].Value); int rightOperand = int.Parse(match.Groups[3].Value); int result = 0; switch (operatorChar) { case '+': result = leftOperand + rightOperand; break; case '-': result = leftOperand - rightOperand; break; case '*': result = leftOperand * rightOperand; break; case '/': if (rightOperand == 0) { Console.WriteLine("除数不能为0"); return; } result = leftOperand / rightOperand; break; } string leftOperandString = leftOperand >= 0 ? leftOperand.ToString() : "(" + leftOperand + ")"; string rightOperandString = rightOperand >= 0 ? rightOperand.ToString() : "(" + rightOperand + ")"; Console.WriteLine("{0} {1} {2} = {3}", leftOperandString, operatorChar, rightOperandString, result); } else { Console.WriteLine("输入格式不正确"); string expression = Console.ReadLine(); int left = 0; int right = 0; char op = ' '; bool leftNegative = false; bool rightNegative = false; for (int i = 0; i < expression.Length; i++) { if (expression[i] == '-') { if (i == 0) { leftNegative = true; } else if (expression[i - 1] == '+' || expression[i - 1] == '-' || expression[i - 1] == '' || expression[i - 1] == '/') { rightNegative = true; } } else if (expression[i] == '+' || expression[i] == '-' || expression[i] == '' || expression[i] == '/') { op = expression[i]; left = int.Parse(expression.Substring(0, i)); right = int.Parse(expression.Substring(i + 1)); break; } } if (leftNegative) { left = -left; } if (rightNegative) { right = -right; } int result = 0; switch (op) { case '+': result = left + right; break; case '-': result = left - right; break; case '*': result = left * right; break; case '/': if (right == 0) { Console.WriteLine("除数不能为0!"); return; } result = left / right; break; } if (leftNegative) { Console.Write("(" + -left + ")"); } else { Console.Write(left); } Console.Write(" " + op + " "); if (rightNegative) { Console.Write("(" + -right + ")"); } else { Console.Write(right); } Console.WriteLine(" = " + result);
解决 无用评论 打赏 举报
悬赏问题
- ¥15 C#读写EXCEL文件,不同编译
- ¥15 如何提取csv文件中需要的列,将其整合为一篇完整文档,并进行jieba分词(语言-python)
- ¥15 MapReduce结果输出到HBase,一直连接不上MySQL
- ¥15 扩散模型sd.webui使用时报错“Nonetype”
- ¥15 stm32流水灯+呼吸灯+外部中断按键
- ¥15 将二维数组,按照假设的规定,如0/1/0 == "4",把对应列位置写成一个字符并打印输出该字符
- ¥15 NX MCD仿真与博途通讯不了啥情况
- ¥15 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
- ¥15 gradio的web端页面格式不对的问题
- ¥15 求大家看看Nonce如何配置