四则运算计算器怎么才能让输出的负数带括号

 

针对第三点:负数带括号的输出,可以先通过正则表达式等工具把输入的表达式字符串分析,再判断运算数是否为负数,如果是,则在前面加上括号。

针对第四点:处理除数为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);