您的位置:首页 > 编程语言 > C#

关于C#作业计算器的一个突发奇想

2014-04-07 01:59 225 查看
    C#的计算器作业埋头做了大半天终于弄出了个大概,对于题目要求里面的那句“麻雀虽小五脏俱全”有很大的感触,叫一个同学作为第一个(估计也是最后一个)用户帮忙测试了下才发现BUG能有如此之多,应该说是自己没能想到的BUG是如此之多。一怒之下写了长篇大论去左修修右补补的,貌似终于出了个较为满意的结果。不过这两天跟同学讨论了一下才发现关于科学计算的那部分是能用堆栈完成的,聊着聊着才突然发现自己好像压根没想过用堆栈。

    话不多说先把自己关于这道题的小构思说一下,就是在保证输入正确的情况下把整个算式(当然不包括等于号咯)作为字符串先存下来,然后通过加减乘除加以分隔以达到提取算式的各个数值的目的再进行计算,这样的方法在普通计算里面是可行的,但要考虑到乘除法和加减法的顺序后就不可行了。于是也不知道当时自己是怎么想的居然想到这么一个方法,如果要考虑到运算顺序的话,先用加减号把字符串隔开,这里用"1+2*3+5”做一个例子,就得到了"1" "2*3""5"这三个子字符串了,然后按顺序遍历这3个子字符串并对他们进行乘除号的分隔,就得到("1")("2""3")("5")这四个结果,那么程序就可以根据每个子字符串的长度判别用乘除号分隔后的子字符串是否为单个数值或者是带乘除后的算式,最后对带乘除号的算式进行计算并把结果返还到用加减号分隔的子字符串中,上例就得到"1""6""5",然后程序退出遍历,重新用加减法计算"1+6+5"便能得到"12"这个结果了。

    相比用栈去存取算式无疑上述方法更为复杂,不过也算是自己做题时摸索出来的一种思路,觉得是一种可行的方法。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: