《信息学奥赛一本通》第51题:简单计算器
题目描述
一个最简单的计算器,支持+,-,*,/
四种运算。仅需考虑输入输出为整数的情况,数据和运算结果不会超过int
表示的范围。然而:
- 如果出现除数为 0 0 0 的情况,则输出:
Divided by zero!
。- 如果出现无效的操作符(即不为
+,-,*,/
之一),则输出:Invalid operator!
。- 除号表示整除,结果向 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 题:简单计算器。
一、题目描述
洛谷的题号是:B2052 简单计算器
二、题意分析
这道题是信息学奥赛一本通练习题的第 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!";
}
按照样例输入对数据进行验证。
符合样例输出,到网站提交测评。
测试通过!
三、完整代码
该题的完整代码如下:
#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)漏掉非法运算符的处理分支,导致程序无输出或输出错误结果。
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~
我们下集见~