老题新解|简单算术表达式求值
《信息学奥赛一本通》第129题:简单算术表达式求值
两位正整数的简单算术运算(只考虑整数运算),算术运算为:
+
,加法运算;
-
,减法运算;
*
,乘法运算;
/
,整除运算;
%
,取余运算。
算术表达式的格式为(运算符前后可能有空格):
运算数运算符运算数。
请输出相应的结果。
输入格式
一行算术表达式。
输出格式
整型算数运算的结果(结果值不一定为 222 位数,可能多于 222 位或少于 222 位)。
输入输出样例 #1
输入 #1
32+64
输出 #1
96
大家好,我是莫小特。
这篇文章给大家带来《信息学奥赛一本通》中的第 129 题:简单算术表达式求值。
一、题目描述
洛谷的题号是:B2130 简单算术表达式求值
二、题意分析
这道题是信息学奥赛一本通练习题的第 129 题。
根据输入格式的描述,输入一行算术表达式,格式为:运算数、运算符、运算数,因为只考虑整数运算,所以运算数为 int 类型,运算符为 char 类型。
int x,y;//运算数
char ch;//运算符
cin>>x>>ch>>y;
输入完成后,根据题目表示,可以写一个函数来完成,返回值为 int 类型,函数名为 js,参数有三个,一个是整数 x,一个是字符 ch,一个是整数 y。
int js(int x,char ch,int y)
{}
根据 ch 的加减乘除求余数类型来完成。
if(ch=='+') return x+y;//加法 返回加法值
if(ch=='-') return x-y;//减法 返回减法值
if(ch=='*') return x*y;//乘法 返回乘法值
if(ch=='/') return x/y;//除法 返回除法值
if(ch=='%') return x%y;//模除 返回余数
函数整体为:
int js(int x,char ch,int y)
{if(ch=='+') return x+y;//加法 返回加法值if(ch=='-') return x-y;//减法 返回减法值if(ch=='*') return x*y;//乘法 返回乘法值if(ch=='/') return x/y;//除法 返回除法值if(ch=='%') return x%y;//模除 返回余数
}
最后在主函数中使用函数来完成。
cout<<js(x,ch,y);
按照样例输入对数据进行验证。
符合样例输出,到网站提交测评。
测试通过!
三、完整代码
该题的完整代码如下:
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int js(int x,char ch,int y)
{if(ch=='+') return x+y;//加法 返回加法值if(ch=='-') return x-y;//减法 返回减法值if(ch=='*') return x*y;//乘法 返回乘法值if(ch=='/') return x/y;//除法 返回除法值if(ch=='%') return x%y;//模除 返回余数
}
int main()
{int x,y;//运算数char ch;//运算符cin>>x>>ch>>y;cout<<js(x,ch,y);return 0;
}
四、总结
本题考察了算术表达式的解析与运算,主要涵盖以下知识点:
(1)使用 cin>>x>>ch>>y 输入运算数与运算符,自动处理空格。
(2)运算符使用 char 类型存储,根据其值选择对应运算。
(3)通过自定义函数 js(int x,char ch,int y) 实现加、减、乘、除、取余的运算。
(4)利用 if 判断分支实现运算符的选择。
(5)输出最终运算结果,支持不同位数的整数。
常见易错点:
(1)未考虑运算符前后可能存在空格,导致输入异常。
(2)整除运算 /
在 C++ 中为整数除法,不能得到小数结果。
(3)取余运算 %
仅能用于整数,若误用浮点数会报错。
(4)函数缺少 return 语句或遗漏某个运算符的处理。
如果你觉得这篇文章对你有帮助,欢迎点赞、收藏、关注我哦!
如果有更好的方法也可以在评论区评论哦,我都会看哒~
我们下集见~