P1537 数字反转(升级版)详解
这个题目还是对于新手比较锻炼思维严谨性的,我认为是在我做过的一些题目中,此题算上等马
先看题目
我先说明我自己的思路,以及这个题目你需要特别注意的地方
1,数字反转,①可用<algorithm>库里面的reverse函数反转字符串
②可用for循环从后往前循环输出
2,此题我自己重新定义了一个reverse函数,起到的作用为删除反转后数字前面为零的情况,另一个函数起辅助作用,我知道你看文字难懂的,我先给你解释反转里的难点
3,举个例子:①一个满足题目的 890% 这个数字,正常反转后为 098%,但是题目要求数字前面不能以0开头,除非这个数字就是 0%,就可用以 0开头,或者说 000%时,也只保留一个0。
②在小数时,比如 1200.00300 为你输入的小数,此时题目要求你反转,但此时你需要注意,他的后面 .00300 的后面两个0是不是要先删去,后面的两个0完全没有意义,反转后反而会占前面位置,不符合题意,再着,反转后 为 .300 仍然需要删去后面多余的0 ,此时就跟我重新定义了两个函数有关系了,只有小数有第二种情况,其他没有,至于为什么,仔细看题目
以下是我的代码:
delf( ) 函数名 取自delete forward 意思为:从前面删除0
delb() 函数取自 delete back 意思为:删除后面的0
substr() 包左不包右 你可能好奇 第一个参数为起始位置,第二个参数为提取个数,但为何第二个为find('%'),找这个符号的下标干嘛,此时,我举例子 一个数 320%,里面每个对应下标为 0123,总共四个字符,find('%')会返回3,此时substr(0,find('%'))即是 substr(0,3),从0开始提前3个字符,最终会提取的为 320 ,所有正确
若里面只有一个参数,则定义的为起始索引,终点默认,其为最后
总结:find()返回某个字符位置索引,则说明其这个字符前面有多少位,有多少个字符,因为索引从0开始,索引比字符位数少1
小数先反转,调用delf(),原本 320.00330变成,23.3300,此时注意,只有小数会出现反转后,后面为0,因为一个整数或者小数里小数点前面的数,开头的数都是有意义的数,不以0开头,所有反转后结尾不为0,只有小数点后面会出现此情况,此时需要调用delb(),substr()会从前往后提取,舍去结尾为0情况