• C# 写的正整数四则运算计算器


    实际上没能做出来负数、括号、小数的功能,才写这么个标题

    大神直接略过,也欢迎指指点点~。~

    输入一个四则运算表达式,计算出结果,想想不难,实现起来也不是很容易的。

    流程:1.for循环输入的四则运算字符串,把字符串重组成一个string列表,叫做rebuildExp,比如说 1*2+23-12转换成 "1","*","2","+","23","-","12"

            2.循环每一项,如果不是符号就追加到新的string列表里起个名字叫chengchuExp,如果是符号就判断是否是"*"或"/"(先算乘除后算加减)

        如果是"*"或"/"  

               计算(chengchuExp最后一项,符号项,和符号后一项)

        删除chengchuExp最后一项,把计算的结果追加到chengchuExp后面

        循环加1

        计算结果就得到了只包含加减法的chengchuExp string列表

       3.循环chengchuExp每一项,如果不是符号就追加到新的string列表,名字叫jiajianExp,如果是符号就判断是否是"+"或"-"

        如果是"+"或"-"

               计算(jiajianExp最后一项,chengchuExp符号项,和chengchuExp符号后一项)

        删除jiajianExp最后一项,把计算的结果追加到jiajianExp后面

        循环加1

        计算结果就是运算结果。话不多说,代码在下面

    ###############################################################################################

    class Program {
            static void Main(string[] args) {
                string expresult = string.Empty;
                while (true) {
                    Console.WriteLine("请输入计算式:");
                    List<string> rebuildExp = ReturnrebuildExp(Console.ReadLine());
                    List<string> chengchuExp = new List<string>();
                    List<string> jiajianExp = new List<string>();
                    int tempValue = 0;
                    //先算乘除并添加到乘除队列里
                    for (int i = 0; i < rebuildExp.Count; i++) {
                        if (int.TryParse(rebuildExp[i].ToString(), out tempValue)) {
                            chengchuExp.Add(rebuildExp[i]);
                        } else {
                            if (rebuildExp[i] == "*" || rebuildExp[i] == "/") {
                                expresult = GetR(chengchuExp[chengchuExp.Count - 1], rebuildExp[i], rebuildExp[i + 1]);
                                chengchuExp.RemoveAt(chengchuExp.Count - 1);
                                chengchuExp.Add(expresult);
                                i++;
                            } else {
                                chengchuExp.Add(rebuildExp[i]);
                            }
                        }
                    }
                    //后算加减并添加到加减队列里
                    for (int i = 0; i < chengchuExp.Count; i++) {
                        if (int.TryParse(chengchuExp[i].ToString(), out tempValue)) {
                            jiajianExp.Add(chengchuExp[i]);
                        } else {
                            if (chengchuExp[i] == "+" || chengchuExp[i] == "-") {
                                expresult = GetR(jiajianExp[jiajianExp.Count - 1], chengchuExp[i], chengchuExp[i + 1]);
                                jiajianExp.RemoveAt(jiajianExp.Count - 1);
                                jiajianExp.Add(expresult);
                                i++;
                            } else {
                                jiajianExp.Add(chengchuExp[i]);
                            }
                        }
                    }
                    string finalexp = string.Empty;
                    Console.WriteLine("计算结果为:{0}", jiajianExp[0]);
                    rebuildExp.Clear();
                    chengchuExp.Clear();
                    jiajianExp.Clear();
                }
            }
            //返回重组后的计算式
            public static List<string> ReturnrebuildExp(string exp) {
                List<string> rebuildExp = new List<string>();
                int tempValue = 0;
                string temp = string.Empty;
                for (int i = 0; i < exp.Length; i++) {
                    if (int.TryParse(exp[i].ToString(), out tempValue)) {
                        temp += exp[i].ToString();
                    } else {
                        rebuildExp.Add(temp);
                        temp = string.Empty;
                        rebuildExp.Add(exp[i].ToString());
                    }
                }
                rebuildExp.Add(temp);
                return rebuildExp;
    
            }
            //得出结果
            public static string GetR(string a, string sign, string b) {
                string ReturnValue = string.Empty;
                int x = Convert.ToInt32(a.ToString());
                int y = Convert.ToInt32(b.ToString());
                switch (sign) {
                    case "+": ReturnValue = (x + y).ToString(); break;
                    case "-": ReturnValue = (x - y).ToString(); break;
                    case "*": ReturnValue = (x * y).ToString(); break;
                    case "/": ReturnValue = (x / y).ToString(); break;
                }
                return ReturnValue;
            }
        }
    

      

  • 相关阅读:
    洛谷 P3138 [USACO16FEB]Load Balancing S(二维前缀和,离散化)
    洛谷 P1052 [NOIP2005 提高组] 过河(dp,数学)
    洛谷 P1955 [NOI2015] 程序自动分析(并查集,离散化)
    洛谷 P3258 [JLOI2014]松鼠的新家(树上差分,lca)
    洛谷 P2296 [NOIP2014 提高组] 寻找道路(反图bfs)
    洛谷 P4141 消失之物(dp方案数)
    洛谷 P5322 [BJOI2019]排兵布阵(dp,分组背包)
    回溯算法
    分治法
    分支限界法
  • 原文地址:https://www.cnblogs.com/luke1006/p/6530450.html
Copyright © 2020-2023  润新知