两种方法解决口算练习题
文章目录
- 口算练习题
- 题目描述
- 输入格式
- 输出格式
- 样例 #1
- 样例输入 #1
- 样例输出 #1
- 提示
- 题解:
- 大佬的代码:
口算练习题
题目描述
王老师正在教简单算术运算。细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习。 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效率。王老师希望尽量减少输入的工作量,比如 5+8\texttt{5+8}5+8 的算式最好只要输入 5\texttt 55 和 8\texttt 88,输出的结果要尽量详细以方便后期排版的使用,比如对于上述输入进行处理后输出 5+8=13\texttt{5+8=13}5+8=13 以及该算式的总长度 666。王老师把这个光荣的任务交给你,请你帮他编程实现以上功能。
输入格式
第一行为数值 iii
接着的 iii 行为需要输入的算式,每行可能有三个数据或两个数据。
若该行为三个数据则第一个数据表示运算类型,a\texttt aa 表示加法运算,b\texttt bb 表示减法运算,c\texttt cc 表示乘法运算,接着的两个数据表示参加运算的运算数。
若该行为两个数据,则表示本题的运算类型与上一题的运算类型相同,而这两个数据为运算数。
输出格式
输出 2×i2\times i2×i 行。对于每个输入的算式,输出完整的运算式及结果,第二行输出该运算式的总长度
样例 #1
样例输入 #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
提示
数据规模与约定
对于 50%50\%50% 的数据,输入的算式都有三个数据,第一个算式一定有三个数据。
对于所有数据,0<i≤500<i\leq 500<i≤50,运算数为非负整数且小于 100001000010000。
题解:
我将分为四部分求解:
- change函数:主要是数字转化为字符;
void change(int sum){int t=0,flag=0;if(sum<0){flag=1;sum=-sum;}while(sum/10!=0){d[t]=sum%10+'0';sum/=10;t++;}d[t]=sum+'0';t++;if(flag){d[t]='-';t++;d[t]='\0';}else {d[t]='\0';}
}
- exchange函数:将字符转化为整数;
void exchange(char *b){int k=0;b1=0;for(int i=strlen(b)-1;i>=0;i--){b1+=(b[i]-'0')*pow(10,k);k++;}
}
- compute函数:计算并输出;
void compute(char *b,char *c,char mark){exchange(b);int k=b1;exchange(c);int k1=b1;int sum=0;if(mark=='a'){sum=k+k1;}else if(mark=='b'){sum=k-k1;}else {sum=k*k1;}change(sum);cout<<b<<mark1[mark-'a']<<c<<"=";for(int i=strlen(d)-1;i>=0;i--){printf("%c",d[i]);}printf("\n");cout<<strlen(b)+strlen(c)+strlen(d)+2<<endl;
}
- main函数,式子的输入;
int main(){int n;cin>>n;int t=n;char mark;while(t--){cin>>a;if(a[0]<'0'||a[0]>'9'){mark=a[0];cin>>b;cin>>c;compute(b,c,mark); }else{cin>>b;compute(a,b,mark);}
a[0]='\0';
b[0]='\0';
c[0]='\0';
d[0]='\0';
}
return 0;
}
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
char a[100],b[100],c[100],d[100],mark1[4]={"+-*"};
int b1=0;
void change(int sum){int t=0,flag=0;if(sum<0){flag=1;sum=-sum;}while(sum/10!=0){d[t]=sum%10+'0';sum/=10;t++;}d[t]=sum+'0';t++;if(flag){d[t]='-';t++;d[t]='\0';}else {d[t]='\0';}
}
void exchange(char *b){int k=0;b1=0;for(int i=strlen(b)-1;i>=0;i--){b1+=(b[i]-'0')*pow(10,k);k++;}
}
void compute(char *b,char *c,char mark){exchange(b);int k=b1;exchange(c);int k1=b1;int sum=0;if(mark=='a'){sum=k+k1;}else if(mark=='b'){sum=k-k1;}else {sum=k*k1;}change(sum);cout<<b<<mark1[mark-'a']<<c<<"=";for(int i=strlen(d)-1;i>=0;i--){printf("%c",d[i]);}printf("\n");cout<<strlen(b)+strlen(c)+strlen(d)+2<<endl;
}int main(){int n;cin>>n;int t=n;char mark;while(t--){cin>>a;if(a[0]<'0'||a[0]>'9'){mark=a[0];cin>>b;cin>>c;compute(b,c,mark); }else{cin>>b;compute(a,b,mark);}
a[0]='\0';
b[0]='\0';
c[0]='\0';
d[0]='\0';
}
return 0;
}
大佬的代码:
同样他是采用sscanf,sprintf方法将字符转整数;
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int main(){int n;char a;int c,d;char b[100],s[100];cin>>n;for(int i=0;i<n;i++){cin>>b;if(b[0]<'0'||b[0]>'9'){a=b[0];cin>>c>>d;} else{sscanf(b,"%d",&c);//将b转化为c的int型;cin>>d; }memset(s,0,sizeof(s));if(a=='a'){sprintf(s,"%d+%d=%d",c,d,c+d);}else if(a=='b'){sprintf(s,"%d-%d=%d",c,d,c-d);}else{sprintf(s,"%d*%d=%d",c,d,c*d);}cout<<s<<endl<<strlen(s)<<endl;}
}
两种方法解决口算练习题相关推荐
- qmenu只在鼠标单击时消失_两种方法解决win10电脑无法使用无线鼠标问题
使用有线鼠标时用户们是否也都会被那条线控制住,有时需要大范围移动时并不行,现在很多用户都会选择使用无线鼠标,因为可以随意移动使用更加方便.但是在使用中也有用户遇到了麻烦,使用win10连接鼠标后无法使 ...
- cf服务器断开连接出现信息有误,CF与服务器断开连接是什么原因?两种方法解决...
穿越火线每次玩到高分的时候游戏就会被提示:"网络出现异常,与服务器断开连接"的情况,怎么解决? 方法步骤: 第一种方法: 1.在电脑上下载安装360安全卫士,接着在主界面中找到工具 ...
- python两种方法解决线程冲突问题
本博文源于python基础炫酷技能,主要讲述python的线程的问题.大家学到多线程的时候只要搞明白两种东西即可,第一线程通信,另一个叫做线程冲突.本博文就以一种打印数字的方法浅析线程冲突的解决方案! ...
- prim算法求最小生成树_最小生成树的两种方法(Kruskal算法和Prim算法)
关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...
- 最小生成树的两种方法(Kruskal算法和Prim算法)
关于图的几个概念定义: 连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图. 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连 ...
- 用两种方法求解九宫算问题
问题: 在一个3*3的方格内填入9个数字,数字的范围从1~9,每个数字仅出现一次,使得每行.每列以及两个对角线的数字之和为15. 一.VBA程序 算法思路: 1.将9个数字分成3组,每组3个数字,使 ...
- 两种方法解决pip、conda安装库时慢的问题
方法一: 直接用国内的源,比如清华源,但清华源有时不太好用,我现在大都用百度源 pip install 库名称 -i https://mirror.baidu.com/pypi/simple 方法二: ...
- oracle 0.5格式问题,两种方法解决Oracle的数值0.5只显示成.5问题
Oracle对数值0.n转换成char类型的时候会自动忽略前面的0(原因好像是为了节省空间0.5保存到数据库为.5).例如: SQL> SELECT to_char(0.5) FROM DUAL ...
- 两种方法解决腾讯会议独立显卡占用高的问题
适用场景:只参与会议,观看他人屏幕共享. 方法一: 如果是英伟达独立显卡: ①打开 "NVIDIA控制面板" ②打开 "管理3D设置" ③添加 "腾讯 ...
最新文章
- 深度分析Java的枚举类型——枚举的线程安全性及序列化问题
- 使用PostMan工具测试spring boot接口的若干请求参数形式
- java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)
- 2007年3月东北微软技术活动预告
- 如何利用阿里云安全产品加强你的网站防护能力
- 隐马尔可夫(HMM)、前/后向算法、Viterbi算法
- http://blog.csdn.net/churximi/article/details/61210129
- 联想电脑怎么进入Android,联想电脑怎么连接手机
- AS3 in FlashDevelop
- vue 如何生成一个dom元素_通过一个简单的示例学习如何编写Vue组件
- 项上的温柔,冬季围巾8大打法图解(组图)
- nginx 过滤post报文 防火墙_详解nginx限制IP恶意调用短信接口处理方法
- windows XP系统内核文件分析精简系统很有好处
- 智能指针是一种类,别名称为句柄类
- MATLAB 线性拟合
- monocle安装不成功 想尽各种办法
- Linux报错:Syntax error: “(“ unexpected解决办法,elf
- 来看看中国计算机视觉行业发展有什么动态?
- 【SPSS】基础图形的绘制(条形图、折线图、饼图、箱图)详细操作过程
- Chopper: Partitioning Models into 3D-Printable Parts论文笔记
热门文章
- gitlab用户邮箱验证的坑
- JavaScript制作留言板
- 麦咖啡McAfee的规则设置
- 当ie浏览器无法上网时
- 对口升学计算机学校录取分,中职对口升学本科第一批院校录取分数线划定
- 亚马逊视频下载用什么工具:试试专业亚马逊视频下载器-Tuneboto Amazon Video Downloader中文版 | 亚马逊上的视频怎么下载?
- python中模块文件的扩展名不一定是py_跟老齐学Python之Import 模块
- 择时策略1:一个金叉死叉(python)
- 无线AP与AC以及STA的区别
- 数字内容市场水量上涨,阜博集团能否成为“鲶鱼”?