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

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

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

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

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

输入输出样例
输入 #1
4
a 64 46
275 125
c 11 99
b 46 64

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

说明/提示
数据规模与约定

0<i<=50

运算数为非负整数且小于10000

对于50%的数据,输入的算式都有三个数据,第一个算式一定有三个数据。

先上代码:

#include<bits/stdc++.h>
using namespace std;int n;
string tmp;
int a, b; //存放两个运算数
char op;  //存放运算符void func() {      //实现对应的输出功能int ans = 0;   //两个运算数的运算结果string aa;     //数字a的字符串形式string bb;     //数字b的字符串形式string ansans; //运算结果的字符串形式if (op == 'a')      ans = a + b;else if (op == 'b') ans = a - b;else if (op == 'c') ans = a * b;stringstream ss; //将int型转换成string型ss<<a;   ss>>aa;     ss.clear(); ss.str(); //重复调用stringstream,在下一次调用记得前清空ss<<b;   ss>>bb;     ss.clear(); ss.str();ss<<ans; ss>>ansans; ss.clear(); ss.str();cout<<aa;if (op == 'a')      cout<<'+';else if (op == 'b') cout<<'-';else if (op == 'c') cout<<'*';cout<<bb<<"="<<ansans<<endl<<aa.length()+bb.length()+ansans.length()+2<<endl;
}int main()
{cin>>n;while (n--) {cin>>tmp;if (tmp[0] >= 'a' && tmp[0] <= 'z') { //如果tmp是字母op = tmp[0];cin>>a>>b;}else { //如果tmp不是字母stringstream ss;ss<<tmp; ss>>a; ss.clear(); ss.str(); //将tmp转换成int型,存到b中。另外要记得清空sscin>>b;}func();}return 0;
}

做一些解释:
首先是main函数,这里的难点在于输入有可能是三个输入,也有可能是两个输入,因此要讨论一下。这里我先定义一个字符串tmp,然后cin>>tmp并判断:
如果tmp[0]是字母的话,将tmp[0]的值给到op中去(op是一个字符类型的变量,用于存储何种运算方式);
如果tmp[0]不是字母的话,将tmp转换成数字,这里用到了stringstream方法。具体用法见文章末尾。

由于op是全局变量,因此如果输入只有两个数字的话,op存储的仍然是上一次的运算符,这样就满足题目“若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同”的要求。

然后是func()函数,很简单,就是根据op,把a与b的运算结果存到ans中去,然后用stringstream方法把a、b、ans转换成字符串、按要求输出(转换成字符串输出是为了方便计算长度)。

PS
stringstream方法实现字符串和数字之间的转换
stringstream的clear()用法

总结
这个题虽然不难,但是通过这道题能学到stringstream的相关用法,这个又方便又简单,希望大家不吝赐教!

洛谷-P1957 口算练习题相关推荐

  1. 洛谷P1957 口算练习题

    P1957 口算练习题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 我自己的代码 比较长 #include <iostream> #include <cstri ...

  2. 洛谷 P1957 口算练习题(字符串操作)

    菜鸟生成记(56) P1957 口算练习题 快乐的水题;暴力模拟 #include<iostream> #include<stdio.h>//使用printf,scanf,一定 ...

  3. 【洛谷】P1957 口算练习题【C++】

    口算练习题 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率.王老师希望尽量 ...

  4. P1957 口算练习题(字符串与int类型的转换)

    题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率.王老师希望尽量减少输入的工 ...

  5. P1957 口算练习题(模拟)

    1957 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率.王老师希望尽量减 ...

  6. P1957 口算练习题 Java

    这道题还是比较简单的,只要会将字符串转整型整型转字符串就可以了(相关链接:关于字符串和整型的转换),虽然代码比较长,但是是很简单的,耐心看看. import java.util.Scanner; pu ...

  7. P1957 口算练习题(输入情况特殊)

    思路 这个题目的难点就是如何输入,换言之就是判断输入的是否为字符及如何转换. 1.当输入的是字母时,则继续输入两个数. 2.当不是字母时,则要将输入的转换成整型,这里用到了sscanf.sscanf( ...

  8. 两种方法解决口算练习题

    文章目录 口算练习题 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 提示 题解: 大佬的代码: 口算练习题 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经 ...

  9. Python实现100以内的加减法口算练习题

    小朋友口算练习题,100以内的加减法运算: 程式要求如下 1,100道100以内的加减法计算题 2,两数相加,和小于等于100 3,被减数必须大于减数 4,前面80道计算题的格式为A+B= 或者C-D ...

  10. 洛谷 P1957 【口算练习题】

    洛谷题目难度都是假的 读入:第一个用string读,判断是否是a,b,c,不是就用进制转换转成十进制数 位数:负数的负号也算一个!0也算一位!(特判或用dowhile) 下面是代码(没有写成子程序所以 ...

最新文章

  1. 运行hadoop自带的wordcount例子
  2. WordCount单词计数
  3. grep与正则表达式基础
  4. 提高Web性能的前端优化技巧总结
  5. php 微信 返回,php版微信返回用户text输入的方法
  6. Qt 清空QPixMap
  7. OpenCASCADE绘制测试线束:图形命令之Axonometric观察器
  8. jQuery 入门教程(5): 显示/隐藏内容
  9. Servlet执行时要实现的方法
  10. ARMV8 datasheet学习笔记5:异常模型
  11. php网上商城拟解决的问题是,上次说的软件商城BUG,已找到问题,并解决~
  12. django+layui图片上传(用户头像修改,实时预览)
  13. 数字信号处理(三)离散时间信号的Z变换
  14. 弘辽科技:淘宝评分飘绿四大原因及快速提高评分之解决技巧
  15. 暑假训练 The Triangle Game (OpenJ_Bailian - 1574)
  16. 《区块链革命》读书笔记1可信的协议 引导未来:区块链经济七大设计原则
  17. css中zoom的用法
  18. Wireshark抓包及常用过滤方法
  19. Git和Gitee的使用(仅分享一下自己成功的过程)
  20. (C语言)汉诺塔与受限汉诺塔

热门文章

  1. 两张表之间进行数据库查询时的聚合函数用法
  2. 针式打印机打印显示传真服务器,针式打印机三联纸怎么设置 点击上面的工具栏上的打印服务...
  3. 【完结】囚生CYの备忘录(20220525-20220813)
  4. .NET6发布到linux
  5. 栈——后进先出的增删改查
  6. 为什么别人可以打开的网站,你却打不开?原因找到了 ,HTTP ERROR 404
  7. 如何确定因果关系?四种理论分析模型!
  8. GC暂停时间过长——未关闭Swap
  9. 使用Selenium实现直播平台的自动刷屏
  10. 智力题----囚犯猜帽子问题