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;
        }
    }

  

posted @ 2017-03-10 14:11  爱钻牛角尖的程序猿  阅读(663)  评论(0编辑  收藏  举报