口算练习题(字符串)

作者 洛谷

单位 重庆科技学院

王老师正在教简单算术运算。细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如5+8的算式最好只要输入5和8,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=13 以及该算式的总长度6。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。

输入格式:

第一行为数值i

接着的i行为需要输入的算式,每行可能有三个数据或两个数据。

若该行为三个数据则第一个数据表示运算类型,a表示加法运算,b表示减法运算,c表示乘法运算,接着的两个数据表示参加运算的运算数。

若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。

输出格式:

输出2*i行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度

输入样例:

在这里给出一组输入。例如:

4
a 64 46
275 125
c 11 99
b 46 64

输出样例:

在这里给出相应的输出。例如:

64+46=110
9
275+125=400
11
11*99=1089
10
46-64=-18
9

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

### C++ 口算练习题 P1957 的测试点分析 对于C++编程中的口算练习题,特别是针对P1957这道题目,在处理过程中需要注意输入数据的各种边界情况以及可能存在的特殊情况。例如,当计算结果为负数时应如何正确处理[^3]。 #### 输入输出要求 该类题目通常会给出一系列简单的加减乘除运算表达式作为输入,程序需要解析这些字符串形式的表达式并求解其数值结果。值得注意的是,某些情况下可能会遇到带有负号的操作数或最终得到负值的结果,因此编写代码时要特别留意这一点。 #### 常见错误原因 如果提交后的解答无法通过任何测试案例,则可能是由于未能全面考虑到所有可能出现的数据情形所造成的。比如未处理好正负号逻辑、溢出问题或是浮点精度误差等问题都可能导致完全不匹配预期输出而被判错。 ```cpp #include <iostream> #include <cstdio> using namespace std; signed main(){ // 加速IO操作 ios::sync_with_stdio(false); cin.tie(nullptr); string s; while(getline(cin, s)){ int a = 0, b = 0, c = 0; sscanf(s.c_str(), "%lld %*c %lld=%lld", &a, &b, &c); if (s.find(&#39;-&#39;) != string::npos && a - b != c){ cout << "WRONG_ANSWER\n"; continue; } else if (s.find(&#39;+&#39;) != string::npos && a + b != c){ cout << "WRONG_ANSWER\n"; continue; } else if (s.find(&#39;*&#39;) != string::npos && a * b != c){ cout << "WRONG_ANSWER\n"; continue; } cout << "RIGHT_ANSWER\n"; } return 0; } ``` 此段代码展示了如何读取一行表示简单四则运算式的字符串,并判断给定的答案是否正确。这里假设每行输入都是有效的数学表达式格式(即形如`num op num=num`),其中op可以是&#39;+&#39;,&#39;-&#39;,&#39;*&#39;之一。此外还包含了对不同运算符对应的算术关系验证逻辑。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值