杭电ACM-1237-简单计算器

       做这个陆陆续续也弄了好几天,一开始是使用栈在做,因为这种类型的题教材上提过(我相信一定也有不少同学一提到写一个简单的不带括号的计算器也会第一时间想到 栈吧)。不过在做的过程,弄了好久也未能用栈来实现。说实话用栈来做是有点复杂了。不说别的,光是你去定义节点和各个函数就有得你弄几分钟了。也许就这会儿功夫人家不用栈的同学已经把这个题给做出来了。但,这可能也只是我们在逃避对栈的使用吧,等有空还得用栈再实现一下,毕竟对自己还是有一定好处的。在经过百度之后,发现了一种特别简单又容易理解的方法(不得不说这些人真牛逼),经过对代码的阅读和揣摩,理清了原作者的思路之后,于是就自己又来实现了一遍。 牛的代码就那么几行,但功能绝不低于同类型的其它代码!


2015年4月8日16:12:08


至于题目,大家请前往这儿(http://acm.hdu.edu.cn/showproblem.php?pid=1237)


下面就是代码,若哪儿有不对或是什么建议,请各位观者不吝指出!


#include <iostream>
#include <iomanip>//保留小数时所用到的函数被包含在此头文件中
using namespace std;
int main()
{
    double d[100];//储存每一个浮点数
    double sum;// 累计整个数组的和
    double num;// 每次输入的单个浮点数
    char operate;// 操作符

    while(cin >> num)// 开始输入第一个数
    {
        sum = 0;// 每次运算时sum 初始化为0
        int i = 0;
        d[0] = num;// 把第一个数保存的d[0]中
        operate = getchar();// 最来判断最后一次,以输入0和回车来结束程序的运行

        if(operate == '\n' && num == 0) break;// 如果输入0回车,则程序结束

        while(cin >> operate >> num)// 输入第一个数之后,后面每次都是接连一个操作符和一个操作数
        {
            if(operate == '*')// 如果本次输入的是 *号,则将当前元素的数乘以num 并保存到当前元素中
                d[i] *= num;
            else if(operate == '/')// ..
                d[i] /= num;
            else if(operate == '+')// 如果本次输入的是 +号,则将num 放入下一个元素中
                d[++i] = num;
            else
                d[++i] = -num;// v如果是 -号,则把-num 放入下一个元素中

            if(getchar() == '\n')// 判断最后是否以回车键结束
                break;// 是回车,完成本轮计算
        }

        for(i; i >= 0; i--)
            sum += d[i];//输入整个数组中的累计和

        cout <<setprecision(2) <<std::fixed <<sum <<endl;//保留两位小数输出sum
    }

    system("pause");
    return 0;
}


输入格式是每个数和操作符之间有空格隔开.
</pre><pre name="code" class="cpp">
运行结果:</span></p><p></p><p><pre name="code" class="cpp">5 + 6
11.00
3 + 9 / 3 + 6 * 2
18.00
0
请按任意键继续. . .



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ACM-ICPC(国际大学生程序设计竞赛)是一项面向大学生的计算机编程竞赛,涉及算法和数据结构等领域。在比赛中,选手需要解决一系列编程问题,使用合适的算法和数据结构来实现正确和高效的解决方案。 对于整理ACM-ICPC模板,以下是一些建议: 1. 了解比赛要求:首先,你需要了解ACM-ICPC比赛的具体要求和规则。这包括了解比赛所涉及的算法和数据结构,以及题目的类型和难度等。 2. 收集资料:收集与ACM-ICPC相关的资料,包括经典算法和数据结构的实现代码、常见问题的解题思路等。可以参考教材、博客、论文等资源。 3. 整理模板:将收集到的资料整理成模板。可以按照算法和数据结构的分类进行整理,例如排序算法、图算法、字符串算法等。对每个模板,添加必要的注释和示例代码,以便理解和使用。 4. 测试代码:对每个模板编写测试代码,确保它们的正确性和可靠性。可以使用已知的测试用例或自行设计测试用例。 5. 更新与扩充:定期更新和扩充模板,以适应ACM-ICPC比赛中新出现的算法和数据结构。同时,根据自己的经验和理解,对模板进行优化和改进。 6. 练习和复习:在比赛之前,利用整理好的模板进行练习和复习。尝试解决一些经典问题,使用模板中的算法和数据结构进行实现,并进行优化。 希望这些建议对你整理ACM-ICPC模板有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值