weixin_46530450 2021-10-02 11:07 采纳率: 0%
浏览 18

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

 

  • 写回答

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);
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 10月2日

悬赏问题

  • ¥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如何配置