P1553 数字反转(升级版)
Emma,关于这道题,我。。不想说啥子,也就做了它一个下午左右吧(原由:本人太菜)
补充一个知识点goto语句:
这个东西特别的好用,可以直接无条件调到冒号后面的语句,进行操作。
举个例子:
#include"bits/stdc++.h"
using namespace std;
int main() {
ios::sync_with_stdio(false);//流输入输出,让cin堪比scanf
int a,b,c,d;
cin>>a>>b;
if(a==b) c=a;
else if(a>b) c=b;
else goto e;
if(c==4) {
e:
for(int i=1; i; i++) {
d+=i;
}
}
cout<<c<<d;
return 0;
}
总结一下自己犯得**错误:
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。
针对以上**错误,我调了很长时间……嘤。
具体的注意事项在code中有注释(稍微有点长Q):
#include"bits/stdc++.h"
using namespace std;
#define N 300
char s[N];
int a[N];//没任何卵用
int cnt=0;//+1
int flag=0;
int main() {
cin>>s;
int len=strlen(s);//字符串长度
//特判0
if((s[0]=='0' && len==1) /*整数*/) {
cout<<0<<"\n";
return 0;
}//一个0
/* if((s[0]=='0' && s[1]=='0') ) {//整数
for(int i=0; i<=len-1; i++)
if(s[i]=='0') cnt++;
if(cnt==(len-1))
cout<<0;
return 0;
}//多个0
*/
cnt=0;
if((s[0]=='0' && s[1]=='%')/*百分数*/) {
cout<<0<<"%\n";
return 0;
}//针对 0%
if(s[0]=='0' && s[1]=='0' && len>1) {
for(int i=0; i<=len-1; i++) {
if(s[i]=='/' || s[i]=='.') {
flag=2;
}
}
}//针对类似数据 0000000/2414
for(int i=0; i<=len-1; i++) {//判断属于哪种类型
if(s[i]=='.'||s[i]=='/')
flag=2;//小数,分数
}
for(int i=0; i<=len-1; i++) {
if(s[i]=='%')
flag=3;//百分数
}
if(flag==0) flag=4;//整数
// cout<<flag<<'\n';//手动调试
if(flag==4) {//整数
cnt=0;//归零
memset(a,0,sizeof(a));//清空
if(s[len-1]=='0') {//如果翻转后开头是0
for(int j=len-2; j>=0; j--) {//从开头接着往前判断直到找到第一个不是0的位置
if(s[j]!='0') {
for(int i=j; i>=0; i--)
cout<<s[i]-'0';
return 0;//直接输出,结束
}
}
}
if(s[len-1]!='0') { //如果翻转后开头不是0
for(int i=len-1; i>=0; i--) cout<<s[i]-'0';
return 0;
}
}
if(flag==3) {//百分数
cnt=0;
memset(a,0,sizeof(a));//
if(s[len-2]=='0') {//因为是百分数,所以最后一个肯定是符号%,直接从倒数第二个开始,len-1是倒数第一个
for(int i=len-3; i>=0; i--) {
if(s[i]!='0') {//跟整数的处理差不多
for(int j=i; j>=0; j--)
cout<<s[j]-'0';
cout<<s[len-1];
return 0;
}
}
} else {
for(int i=len-2; i>=0; i--)//
cout<<s[i]-'0';
cout<<s[len-1];
return 0;
}
}
int b;
int d=-100;//记录位置
if(flag==2) {//小数、分数
for(int i=0; i<=len-1; i++) {//从头开始找'.'和'/'
if(s[i]=='.'||s[i]=='/') {//以它为界限,分成前后两部分
b=i;
break;//找到就直接退出循环
}
}
if(s[b-1]=='0' && (b-1==0)) {//如果只有一个0
cout<<0;
goto a;//goto 语句
} else if(s[b-1]=='0') {//多个0
for(int y=b-1; y>=0; y--) {
if(s[y]!='0') {
d=y;//记录位置
break;
}
}
if(d==(-100)) goto b;//goto语句,针对此类数据134500000.0000
for(int y=d; y>=0; y--) cout<<s[y];//输出前半部分
goto a;
}
b:
if(s[b-1]=='0') {
for(int j=b-2; j>=0; j--) {//如果存在多个0
if(s[j]=='0')
cnt++;
}
if(cnt==(b-1)) {
cout<<0;
goto a;
}
}//再一次针对这种数据 000000000/2414,一个貌似针对不了
if(s[b-1]=='0') {//注意翻转后开头是否为0
for(int j=b-2; j>=0; j--) {//找第一个不是0的位置
if(s[j]!=0)
for(int k=j; k>=0; k--)
cout<<s[k];
break;
}
} else if(s[b-1]!='0') {//如果开头不是0
for(int j=b-1; j>=0; j--)
cout<<s[j];
}
a:
cout<<s[b];//输出符号
//找符号界限后面的
/*
以符号'.'和'/'为界限分成前后两个部分,(因为它们都位于数字中间,所以可以将它们归为一类)
*/
cnt=0;//归零
if(s[len-1]=='0' && (len-1==b+1) ) {//如果只有一个0
cout<<0;
return 0;
} else if(s[len-1]=='0') {//如果存在多个0
for(int j=len-2; j>=b+1; j--) {
if(s[j]=='0') cnt++;
}
if(cnt==(len-2-b)) {
cout<<0;
return 0;
}
}//针对这种数据 0.000000
cnt=0;
int w;//记录位置
if(s[b+1]=='0') {
for(int u=b+2; u<=len-1; u++) {
if(s[u]!='0') {
w=u;
break;
}
}
for(int u=b+1; u<w; u++) {
s[u]='\0';//转换为空字符
}
}//针对这种数据1234567890.0987654321
if(s[len-1]=='0') {//注意翻转后开头是否为0
for(int j=len-2; j>=b+1; j--) {
if(s[j]!='0') {
/*for(int k=j; k>=b+1; k--)
if(s[k]=='0' && s[k+1]=='0' && s[k+2]=='0' && s[k+3]=='0' && s[k+4]=='0') {
cout<<" ";
return 0;
}
if(s[k]=='0') {
for(int l=k; l>=b+1; l--)
if(s[k]=='0') cnt++;
if(cnt==(k-b)) {
s[k]=' ';
}
}*/
for(int l=j; l>=b+1; l--)
cout<<s[l];
return 0;
}
}
} else if(s[len-1]!='0') { //若开头不是0
for(int x=len-1; x>=b+1; x--)
cout<<s[x];
return 0;
}
}
}
//DARLING in the FRANXX
P1553 数字反转(升级版)的更多相关文章
- 洛谷P1553数字反转升级版
题目链接:https://www.luogu.org/problemnew/show/P1553
- 洛谷 P1553 数字反转(升级版)【字符串+STL stack】
P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...
- 洛谷 P1553 数字反转(升级版)
P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...
- luogu P1553 数字反转(升级版)
P1553 数字反转(升级版) 直通 思路: 首先使用char数组进行读入,然后直接按照题目要求进行反转即可, 但要注意的是对零的处理:(有点类似于高精去除前导零) ①去除只是整数.百分数的时候,反转 ...
- 字符串--P1553 数字反转(升级版)
题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...
- P1553 数字反转(升级版)
题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...
- P1553 数字反转(升级版)(copy(),reverse(),find(),substr(),erase())
题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反 ...
- (Java实现) 洛谷 P1553 数字反转(升级版)
题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...
- 洛谷P1553 数字反转(升级版)
题目简介 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对 ...
- (水题)洛谷 - P1553 - 数字反转(升级版) - 字符串格式转换
https://www.luogu.org/problemnew/show/P1553 忘记给整数加上前导零去除的代码了.其实不去也可以,额外的进位用一个carry另外存起来就好. #include& ...
随机推荐
- 【MySQL】MariaDB10.3新特性--闪回查询
MariaDB10.3新特性--闪回查询 System-Versioned表特性的引入,可以对表进行闪回.完成类似于Oracle的闪回查询. 修改已有表为System-Versioned MariaD ...
- VS一个奇怪的发布问题
同事的环境,发布项目时一直提示找不到某dll,在引用及bin里未发现黄色感叹号,后来发现问题是因为项目文件不小心包含了一个外部bin目录,并且该bin目录中的dll删除导致的.
- Skywalking入门介绍,skywalking6.5.0 +mysql (windows) 搭建
一. 介绍 1. 基本信息 SkyWalking 创建于2015年,提供分布式追踪功能.从5.x开始,项目进化为一个完成功能的Application Performance Monitoring系统. ...
- MobaXterm的安装和使用
MobaXterm的安装和使用 安装 1 下载网址:https://mobaxterm.mobatek.net/,选择“Download”,选择免费版的下载. 2 解压压缩包,双击exe文件安装软件, ...
- 理解 Virtual DOM(摘)及评价
框架并没有提高web的性能,只是让开发者更加专注的完成业务逻辑,而不用过渡的考虑性能上的优化.如果以性能来比的话,框架是绝对比不过优化后的原生代码的. 二.什么是Virtual DOM Virtual ...
- Go语言-1-标识符与变量
目录 1. Go标识符 1.1 Go关键字 1.2 常量标识符(4个) 1.3 空白标识符(1个) 1.4 内置数据类型标识符 1.5 内置函数(15个) 2. Go语言操作符 3. Go语言变量 3 ...
- 【VS2019】Web项目发布时提示无法连接FTP服务器
使用 Visual Studio 2019 时出现的问题 环境:win10 ltsc 场景 发布Web项目到FTP时 失败,并提示 _无法打开网站"ftp://...".未安装与 ...
- StackExchange.Redis 封装
博主最近开始玩Redis啊~~ 看了很多Redis的文章,感觉有点云里雾里的,之前看到是ServiceStack.Redis,看了一些大佬封装的Helper类,还是懵懵的QAQ 没办法啊只能硬着**上 ...
- .Net IOC框架入门之——Autofac
一.简介 Autofac是.NET领域最为流行的IOC框架之一,传说是速度最快的一个 目的 1.依赖注入的目的是为了解耦.2.不依赖于具体类,而依赖抽象类或者接口,这叫依赖倒置.3.控制反转即IoC ...
- C++中的Mat, const Mat, Mat &,Mat &, const Mat &的区别
Mat, copy传递,不会改变外部变量的Mat. Mat &, reference传递,函数内部修改将会改变外部. const Mat, copy传递,在函数内,不会被修改,也不会影响到外部 ...