Emma,关于这道题,我。。不想说啥子,也就做了它一个下午左右吧(原由:本人太菜)


补充一个知识点goto语句:

这个东西特别的好用,可以直接无条件调到冒号后面的语句,进行操作。

举个例子:

  1. #include"bits/stdc++.h"
  2. using namespace std;
  3. int main() {
  4. ios::sync_with_stdio(false);//流输入输出,让cin堪比scanf
  5. int a,b,c,d;
  6. cin>>a>>b;
  7. if(a==b) c=a;
  8. else if(a>b) c=b;
  9. else goto e;
  10. if(c==4) {
  11. e:
  12. for(int i=1; i; i++) {
  13. d+=i;
  14. }
  15. }
  16. cout<<c<<d;
  17. return 0;
  18. }

总结一下自己犯得**错误:

1.(针对数据点2)如测试数据0.0000 没有判断多个0

2.(针对数据点4)如测试数据0000/2414 当是分数的时候,没有判断前半部分的多个0

3.(针对数据点5)如测试数据1234567890.0987654321 ' . ' 后半部分翻转后0移到末尾,不应该输出(但我却输出了Q)

4.(针对数据点6)如测试数据0/10000 输出的正确结果应为0/1,但我的却是0/00001。

5.(针对数据点20)如测试数据132000.000 输出应该为231.0。我的是231000.0。忘记删去0。


  1. 针对以上**错误,我调了很长时间……嘤。

具体的注意事项在code中有注释(稍微有点长Q):

  1. #include"bits/stdc++.h"
  2. using namespace std;
  3. #define N 300
  4. char s[N];
  5. int a[N];//没任何卵用
  6. int cnt=0;//+1
  7. int flag=0;
  8. int main() {
  9. cin>>s;
  10. int len=strlen(s);//字符串长度
  11. //特判0
  12. if((s[0]=='0' && len==1) /*整数*/) {
  13. cout<<0<<"\n";
  14. return 0;
  15. }//一个0
  16. /* if((s[0]=='0' && s[1]=='0') ) {//整数
  17. for(int i=0; i<=len-1; i++)
  18. if(s[i]=='0') cnt++;
  19. if(cnt==(len-1))
  20. cout<<0;
  21. return 0;
  22. }//多个0
  23. */
  24. cnt=0;
  25. if((s[0]=='0' && s[1]=='%')/*百分数*/) {
  26. cout<<0<<"%\n";
  27. return 0;
  28. }//针对 0%
  29. if(s[0]=='0' && s[1]=='0' && len>1) {
  30. for(int i=0; i<=len-1; i++) {
  31. if(s[i]=='/' || s[i]=='.') {
  32. flag=2;
  33. }
  34. }
  35. }//针对类似数据 0000000/2414
  36. for(int i=0; i<=len-1; i++) {//判断属于哪种类型
  37. if(s[i]=='.'||s[i]=='/')
  38. flag=2;//小数,分数
  39. }
  40. for(int i=0; i<=len-1; i++) {
  41. if(s[i]=='%')
  42. flag=3;//百分数
  43. }
  44. if(flag==0) flag=4;//整数
  45. // cout<<flag<<'\n';//手动调试
  46. if(flag==4) {//整数
  47. cnt=0;//归零
  48. memset(a,0,sizeof(a));//清空
  49. if(s[len-1]=='0') {//如果翻转后开头是0
  50. for(int j=len-2; j>=0; j--) {//从开头接着往前判断直到找到第一个不是0的位置
  51. if(s[j]!='0') {
  52. for(int i=j; i>=0; i--)
  53. cout<<s[i]-'0';
  54. return 0;//直接输出,结束
  55. }
  56. }
  57. }
  58. if(s[len-1]!='0') { //如果翻转后开头不是0
  59. for(int i=len-1; i>=0; i--) cout<<s[i]-'0';
  60. return 0;
  61. }
  62. }
  63. if(flag==3) {//百分数
  64. cnt=0;
  65. memset(a,0,sizeof(a));//
  66. if(s[len-2]=='0') {//因为是百分数,所以最后一个肯定是符号%,直接从倒数第二个开始,len-1是倒数第一个
  67. for(int i=len-3; i>=0; i--) {
  68. if(s[i]!='0') {//跟整数的处理差不多
  69. for(int j=i; j>=0; j--)
  70. cout<<s[j]-'0';
  71. cout<<s[len-1];
  72. return 0;
  73. }
  74. }
  75. } else {
  76. for(int i=len-2; i>=0; i--)//
  77. cout<<s[i]-'0';
  78. cout<<s[len-1];
  79. return 0;
  80. }
  81. }
  82. int b;
  83. int d=-100;//记录位置
  84. if(flag==2) {//小数、分数
  85. for(int i=0; i<=len-1; i++) {//从头开始找'.'和'/'
  86. if(s[i]=='.'||s[i]=='/') {//以它为界限,分成前后两部分
  87. b=i;
  88. break;//找到就直接退出循环
  89. }
  90. }
  91. if(s[b-1]=='0' && (b-1==0)) {//如果只有一个0
  92. cout<<0;
  93. goto a;//goto 语句
  94. } else if(s[b-1]=='0') {//多个0
  95. for(int y=b-1; y>=0; y--) {
  96. if(s[y]!='0') {
  97. d=y;//记录位置
  98. break;
  99. }
  100. }
  101. if(d==(-100)) goto b;//goto语句,针对此类数据134500000.0000
  102. for(int y=d; y>=0; y--) cout<<s[y];//输出前半部分
  103. goto a;
  104. }
  105. b:
  106. if(s[b-1]=='0') {
  107. for(int j=b-2; j>=0; j--) {//如果存在多个0
  108. if(s[j]=='0')
  109. cnt++;
  110. }
  111. if(cnt==(b-1)) {
  112. cout<<0;
  113. goto a;
  114. }
  115. }//再一次针对这种数据 000000000/2414,一个貌似针对不了
  116. if(s[b-1]=='0') {//注意翻转后开头是否为0
  117. for(int j=b-2; j>=0; j--) {//找第一个不是0的位置
  118. if(s[j]!=0)
  119. for(int k=j; k>=0; k--)
  120. cout<<s[k];
  121. break;
  122. }
  123. } else if(s[b-1]!='0') {//如果开头不是0
  124. for(int j=b-1; j>=0; j--)
  125. cout<<s[j];
  126. }
  127. a:
  128. cout<<s[b];//输出符号
  129. //找符号界限后面的
  130. /*
  131. 以符号'.'和'/'为界限分成前后两个部分,(因为它们都位于数字中间,所以可以将它们归为一类)
  132. */
  133. cnt=0;//归零
  134. if(s[len-1]=='0' && (len-1==b+1) ) {//如果只有一个0
  135. cout<<0;
  136. return 0;
  137. } else if(s[len-1]=='0') {//如果存在多个0
  138. for(int j=len-2; j>=b+1; j--) {
  139. if(s[j]=='0') cnt++;
  140. }
  141. if(cnt==(len-2-b)) {
  142. cout<<0;
  143. return 0;
  144. }
  145. }//针对这种数据 0.000000
  146. cnt=0;
  147. int w;//记录位置
  148. if(s[b+1]=='0') {
  149. for(int u=b+2; u<=len-1; u++) {
  150. if(s[u]!='0') {
  151. w=u;
  152. break;
  153. }
  154. }
  155. for(int u=b+1; u<w; u++) {
  156. s[u]='\0';//转换为空字符
  157. }
  158. }//针对这种数据1234567890.0987654321
  159. if(s[len-1]=='0') {//注意翻转后开头是否为0
  160. for(int j=len-2; j>=b+1; j--) {
  161. if(s[j]!='0') {
  162. /*for(int k=j; k>=b+1; k--)
  163. if(s[k]=='0' && s[k+1]=='0' && s[k+2]=='0' && s[k+3]=='0' && s[k+4]=='0') {
  164. cout<<" ";
  165. return 0;
  166. }
  167. if(s[k]=='0') {
  168. for(int l=k; l>=b+1; l--)
  169. if(s[k]=='0') cnt++;
  170. if(cnt==(k-b)) {
  171. s[k]=' ';
  172. }
  173. }*/
  174. for(int l=j; l>=b+1; l--)
  175. cout<<s[l];
  176. return 0;
  177. }
  178. }
  179. } else if(s[len-1]!='0') { //若开头不是0
  180. for(int x=len-1; x>=b+1; x--)
  181. cout<<s[x];
  182. return 0;
  183. }
  184. }
  185. }
  186. //DARLING in the FRANXX

P1553 数字反转(升级版)的更多相关文章

  1. 洛谷P1553数字反转升级版

    题目链接:https://www.luogu.org/problemnew/show/P1553

  2. 洛谷 P1553 数字反转(升级版)【字符串+STL stack】

    P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...

  3. 洛谷 P1553 数字反转(升级版)

    P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...

  4. luogu P1553 数字反转(升级版)

    P1553 数字反转(升级版) 直通 思路: 首先使用char数组进行读入,然后直接按照题目要求进行反转即可, 但要注意的是对零的处理:(有点类似于高精去除前导零) ①去除只是整数.百分数的时候,反转 ...

  5. 字符串--P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  6. P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  7. P1553 数字反转(升级版)(copy(),reverse(),find(),substr(),erase())

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反 ...

  8. (Java实现) 洛谷 P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  9. 洛谷P1553 数字反转(升级版)

    题目简介 题目描述       给定一个数,请将该数各个位上数字反转得到一个新数.       这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对 ...

  10. (水题)洛谷 - P1553 - 数字反转(升级版) - 字符串格式转换

    https://www.luogu.org/problemnew/show/P1553 忘记给整数加上前导零去除的代码了.其实不去也可以,额外的进位用一个carry另外存起来就好. #include& ...

随机推荐

  1. [转] vue父组件触发子组件事件

    1. 父组件中获取子组件方法 $children 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <template>     < ...

  2. MySql 参数赋值bug (MySql.Data, Version=6.9.6.0 沙雕玩意)

    直接将参数赋值为常量0则参数值为null,出现异常:MySql.Data.MySqlClient.MySqlException (0x80004005): Column 'PayType' canno ...

  3. iTextSharp生成pdf含模板(一)---制作pdf模板

    参考地址:https://www.cnblogs.com/ibeisha/p/itextsharp-pdf.html 一.使用场景:在线填写一些信息,根据对应的信息生成奖状. 二.解决方案 1.新建w ...

  4. python 数据结构之图的储存方式

    参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...

  5. 阿里云监控RDS

    RDS性能监控API https://help.aliyun.com/document_detail/26280.html?spm=a2c4g.11186623.6.1576.341d7159uzLD ...

  6. Android中实现Activity的透明背景效果

    实现方式一(使用系统透明样式) 通过配置 Activity 的样式来实现,在 AndroidManifest.xml 找到要实现透明效果的 Activity,在 Activity 的配置中添加如下的代 ...

  7. 使用Keepalived实现MySQL双主高可用

    MySQL双主配置 环境准备: OS: CentOS7 master:192.168.1.10 backup:192.168.1.20 VIP:192.168.1.30 一.安装MySQL数据库. 在 ...

  8. 【转】WPF 异步执行方法后对 UI 进行更新的几种方法

    使用 async/await 的情况: private async void Button_Click(object sender, RoutedEventArgs e) { (sender as B ...

  9. django-URL路由系统

    配置 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个U ...

  10. 团队第四次作业:alpha1发布成绩汇总

    一.作业题目 团队第四次作业:alpha1发布 二.作业评分标准 博客评分规则(总分100)博客要求 给出开头和团队成员列表(10') 给出发布地址以及安装手册(20') 给出测试报告(40') 给出 ...