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