老题新解|简单计算器

《信息学奥赛一本通》第51题:简单计算器

题目描述
一个最简单的计算器,支持 +,-,*,/ 四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过 int 表示的范围。然而:

  1. 如果出现除数为 0 0 0 的情况,则输出:Divided by zero!
  2. 如果出现无效的操作符(即不为 +,-,*,/ 之一),则输出:Invalid operator!
  3. 除号表示整除,结果向 0 取整。
    输入格式
    输入只有一行,共有三个参数,其中第 1 , 2 1,2 1,2 个参数为整数,第 3 3 3 个参数为操作符(+,-,*,/)
    输出格式
    输出只有一行,一个整数,为运算结果。然而:
    1、如果出现除数为 0 0 0 的情况,则输出:Divided by zero!
    2、如果出现无效的操作符(即不为 +,-,*,/ 之一),则输出:Invalid operator!
    输入输出样例 #1
    输入 #1
    1 2 +
    输出 #1
    3
    输入输出样例 #2
    输入 #2
    2 4 *
    输出 #2
    8
    输入输出样例 #3
    输入 #3
    5 0 /
    输出 #3
    Divided by zero!

大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 51 题:简单计算器。

image.png

一、题目描述

洛谷的题号是:B2052 简单计算器

image.png

二、题意分析

这道题是信息学奥赛一本通练习题的第 51 题。

根据输入格式的描述可知,输入有三个参数,第 1、2 个为整数,第三个为操作符,为字符类型。

所以分别使用 int 类型和 char 字符类型。

int a,b;
cin>>a>>b;
char c;
cin>>c;

输入完成后,我们来分析题目,要实现一个简单计算器,支持 +、-、*、/ 四种运算,并且数据不会超过 int 类型,使用多分支语句,只需判断字符 c 的类型。

如果是加号,则进行加法。

if(c=='+')
{
	cout<<a+b;	
}

如果是减号,则进行减法。

else if(c=='-')
{	
	cout<<a-b; 
}

如果是乘号,则进行乘法。

else if(c=='*')
{
	cout<<a*b; 
}

如果是除号,要区分除数是否为 0,不为 0,则进行除法,为 0,则输出 Divided by zero!

else if(c=='/')
{
	if(b==0)
	{
		cout<<"Divided by zero!";	
	}
	else
	{
		cout<<a/b;
	}
} 

其他情况就输出:Invalid operator!

else
{
	cout<<"Invalid operator!";
}

按照样例输入对数据进行验证。

image.png
image.png
image.png

符合样例输出,到网站提交测评。

image.png

测试通过!

三、完整代码

该题的完整代码如下:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main()
{
	int a,b;
	char c;
	cin>>a>>b>>c;
	if(c=='+')
	{
		cout<<a+b;	
	}
	else if(c=='-')
	{	
		cout<<a-b; 
	}
	else if(c=='*')
	{
		cout<<a*b; 
	}
	else if(c=='/')
	{
		if(b==0)
		{
			cout<<"Divided by zero!";	
		}
		else
		{
			cout<<a/b;
		}
	} 
	else
	{
		cout<<"Invalid operator!";
	}
}

四、总结

本题考察了以下知识点:

1、条件判断结构(多分支 if-else if-else)的应用。

if(c=='+')
{
	
}
else if(c=='-')
{	
	
}
else if(c=='*')
{

}
else if(c=='/')
{

}
else
{

}

2、整数四则运算及异常处理(除数为零、非法运算符)。

需要注意以下注意事项:

(1)输入顺序与类型:前两个数是 int,运算符是单个 char,避免把运算符当字符串读取。

(2)除法特判:当运算符为 / 时,必须先判断除数是否为 0,优先输出 "Divided by zero!",否则再进行整数整除运算(向零取整)。

(3)非法运算符处理:如果运算符不是 + - * / 中的任意一个,应直接输出 "Invalid operator!"

常见易错点:

(1)忘记区分字符 '/' 与字符串 "/",导致读取或判断出错。

(2)除法时未提前判断除数是否为 0,直接运算会引发运行时错误。

(3)漏掉非法运算符的处理分支,导致程序无输出或输出错误结果。

---end---

如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~

我们下集见~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员莫小特

谢谢你~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值