[打基础]luogu1957口算练习题——字符串基本操作
题意:第一行给出数据组数n,之后n行每行给出三个或两个数据,若给三个数据,则第一个数据用单个字符a/b/c分别表示+/-/*运算,后两个数表示参与运算的数字,若给两个数据延续之前的运算
要求对每行数据输出对应的计算表达式(如a 1 2输出1+2=3)和表达式的长度
我啥都忘记…
思维上没有难度,几个小的地方处理清楚
- 比如对于每行两个数据还是三个数据的判定可以先读入两个数据p,q(默认当做参与运算的数字),再getchar一下,如果得到\n或者\r说明行尾了,如果是空格后面还有一个数据,那就应该让运算符变成第一个p,实际上的p应该是读到的q,然后q另外再读一个。这里用到 strcpy(p,q); 来用q覆盖p
- 再然后是把字符串弄成数字,应该没问题,如果是负数判个负号(不过这题甚至都保证非负),接着从高位往低位逐位求和就行
- 最后用一个新字符串保存要输出的表达式,用 strcat(p,q); 把q接到p的后面,计算结果直接当数字输出,最后输出长度的时候用 strlen(表达式)+答案长度
- 然后要说的是我第一次交的时候wa掉的地方…如果答案是0的话长度是1…特别提醒
1 #include<cstdio>
2 #include<cstring>
3 const int N=105;
4 int l,f,m,n,ans;
5 char p[N],q[N],r[N],pri[N];
6 inline void work(char *t,int *g)
7 {
8 *g=0;
9 int len=strlen(t);
10 for(register int i=0;i<len;i++)*g=*g*10+t[i]-'0';
11 }
12 inline int calc(int g)
13 {
14 int res=0;if(g<=0)res++,g=-g;
15 /*
16 attention!
17 if g equal to,res should be 1 not 0;
18 */
19 while(g){g/=10;res++;}
20 return res;
21 }
22 int main()
23 {
24 //freopen("input.in","r",stdin);
25 scanf("%d",&l);f=-1;
26 while(l--)
27 {
28 scanf("%s%s",p,q);char c=getchar();
29 if(c==' ')
30 {
31 strcpy(r,p);strcpy(p,q);
32 scanf("%s",q);
33 f=r[0]-'a';
34 }
35 work(p,&m);work(q,&n);
36
37 strcat(pri,p);
38 if(f==0)ans=m+n,strcat(pri,"+");
39 else if(f==1)ans=m-n,strcat(pri,"-");
40 else if(f==2)ans=m*n,strcat(pri,"*");
41 strcat(pri,q);strcat(pri,"=");
42
43 printf("%s%d\n",pri,ans);
44 printf("%d\n",strlen(pri)+calc(ans));
45 memset(pri,0,sizeof(pri));
46 }
47 return 0 ;
48 }
[打基础]luogu1957口算练习题——字符串基本操作的更多相关文章
- 洛谷 P1957 口算练习题
洛谷 P1957 口算练习题 题目描述 王老师正在教简单算术运算.细心的王老师收集了i道学生经常做错的口算题,并且想整理编写成一份练习. 编排这些题目是一件繁琐的事情,为此他想用计算机程序来提高工作效 ...
- 洛谷 P1957 口算练习题 题解
题目传送门 这道题是考字符串处理,另外输入要使用c++的cin的神奇功能. #include<bits/stdc++.h> using namespace std; int n;char ...
- 洛谷P1957口算练习题题解
前言: 题目传送门:https://www.luogu.com.cn/problem/P1957 其实这很简单 纯模拟撒~~~~ 正文开始: _话说 ,就当本蒟蒻正高高兴兴的刷水题时,居然 碰到了这个 ...
- 《口算大作战 2》DLC:算法真奇妙
211614331 王诚荣 211614354 陈斌 --第一次结对作业 DLC DLC:三年级混合运算模块现已更新!现在您可以愉快的使用三年级题库啦.同时您必须拥有本体才能使用此DLC 单击此处查看 ...
- JAVASE02-Unit01: API文档 、 字符串基本操作
API文档 . 字符串基本操作 文档注释 package day01; /** * 文档注释只能定义在三个地方: * 类,方法,常量 * * 文档注释是功能注释,用来说明功能作用 * 在类上使用的目的 ...
- WPF简单的口算案例
前几天在博客园,看到有博友利用Winform做了一个口算案例,于是我想把它移植在WPF程序中.Winform程序:http://www.cnblogs.com/ImYZF/p/3345452.html ...
- C# WinForm动态控件实例:口算训练
昨天晚上回寝室看到室友正在被一个C#课的作业苦恼,作业的内容是编写一个口算训练程序,能够实现随意添加题目数量.于是,喜欢写C#的我就决定解救一下他们. 创建动态控件 既然要动态添加,那就必须使用动态控 ...
- 用Python开发小学二年级口算自动出题程序
版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:460356155@qq.com 武汉光谷一小二年级要求家长每天要给小孩出口算题目,让孩子练习. 根据老师出题要求编写了Python程序 ...
- 关于python字符串基本操作
python字符串基本操作,比如字符串的替换.删除.截取.复制.连接.分割等.都是一些关于字符串的一些方法.下面来列举一些,相信对学习python还是有些帮助的. 1.去除空格--strp(): &g ...
随机推荐
- windbg 分析cpu异常
1. !threadpool 查看当前CPU状况 线程数等等 2. !runaway 查看那几个线程使用的高 建议多抓几个dump 然后确定到底是哪个线程 3. ~线程IDs 跳转到那个 ...
- TCP的ACK机制
下面是整个的tcp的三次握手和四次挥手的协议 TCP四次挥手 在客户端先发送一个FIN的包,表示要close(),客户端想和连接断开,发完之后出于FIN_WAIT_1状态下:服务端收到之后就变成CLO ...
- FL Studio乐理教程之和弦进行
和弦级数 在一个调内,分别由调内7个音为根音组成的和弦总共有7个,每个和弦依次为1-7级和弦.例如在C大调内,以C为根音建立和弦,就是一级和弦,以D为根音建立和弦,即是二级和弦,以此类推. 图1:1- ...
- 利用css3实现照片列表展开小demo
效果如下: 其实实现起来很简单,就是控制 宽 高的变化,然后给他加上transition 过度而已.觉得代码没什么难的地方,就不打注释了,如果哪里有不懂的话,可以直接评论呢. 直接上源码 html代码 ...
- iOS中字符串转float类型失真的解决办法
最近在做项目的过程中,偶然遇到了一个问题,就是字符串和浮点类型的转换.以往都是通过[NSString stringWithFormat:@"%d",goodcount]这种方式转换 ...
- Mybatis【2.1】-- 从读取流到创建SqlSession发生了什么?
目录 1.Resources.getResourceAsStream("mybatis.xml")到底做了什么? 2. new SqlSessionFactoryBuilder() ...
- sqli-labs-master less05 及 Burp Suite暴力破解示例
一.首先测试显示内容 例:http://localhost/sqli-labs-master/Less-5/?id=1 http://localhost/sqli-labs-master/Less-5 ...
- linux ssh远程连接控制 linux(centOS) 口令、密钥连接
sshd服务提供两种安全验证的方法: 基于口令的安全验证:经过验证帐号与密码即可登陆到远程主机. 基于密钥的安全验证:需要在本地生成"密钥对"后将公钥传送至服务端,进行公共密钥的比 ...
- LeetCode 034 Search for a Range
题目要求:Search for a Range Given a sorted array of integers, find the starting and ending position of a ...
- python 二维数组赋值问题
[[]]是一个含有一个空列表元素的列表,所以[[]]*3表示3个指向这个空列表元素的引用, 修改任何一个元素都会改变整个列表 所以需要用另外一种方式进行创建多维数组,以免浅拷贝 >>> ...