文章

8

粉丝

139

获赞

19

访问

22.5k

头像
逻辑很简单,但是实现却要小心多多
推荐阅读
P1097
发布于2023年3月9日 16:59
阅读数 3.6k

又是小白系列的题解反思,这题相比以往做过的题目,坑点更多,然后反思和提高也是能让我们不断变强。尽管这题的代码是搁置了两三天最后憋出来的错误的一道经验教训,不过好在最后终于AC了,但难过的是不知道真实考试的时候会不会也有这样敏锐的判断力,接下来开始我们的复盘吧!

1、首先注意题干,在题设之下,余数(也就是负二进制的输出)只有0、1之分,再加上我们从小学就学过的一道公式:被除数➗除数=商+余数;这个公式也是贯穿我们题目始终的一个逻辑;那么随之而来的问题就是,如果碰到余数为负数的存在,应该怎么办,由于余数的限制,那么我们给出的方案就是:余数不可能为0,那么余数就固定为1输出(这个也体现在我们的代码里),eg:正常来说-3%-2=1······-1;那么经过我们本题的逻辑后,就应为-3%-2=2······1;就是颠覆了一下我们传统的取余运算,但是依然遵循我们的除数公式,只不过通过我们人为的修改余数,使得等式平衡,余数1可以由此被输出;

2、第二个点,给到的是科普,相对于我们计算机来说,它的去余或者是有关负数的整除运算,c++遵循的规则是向0取整,而并非是向上或是向下取整,eg:7/4=1;7/-4=-1(前者不是2,说明不是向上;后者不是-2说明不是向下)以及-7/4=-1;-7/-4=1;

3、小白错误,由于我们定义的a数组是字符型数组,因为我们要保证最后的输出结果是01串,所以我们不能简单的定义a数组的值为整数,而应该是带上''的01字符,所以这个坑点也导致了一开始的输出结果一直输出乱码或者框框的原因;(因为整数对于字符串来说是地址的位置)

4、输出要考虑0的情况,可能很多人没有注意这点细节导致代码一直错误在0%,明明自己经过运算的正常代码都能通过,可是偏偏忽略了0的特殊情况(恰巧这题的监测点一开始就输入的是0,让人先吃了闭门羹,实际上就是没考虑到这一个特殊数据),因为很多人在循环内部定义的是直到输入数m为0时,才算作循环结束,所以就偏偏卡在了这个死角上。

5、最应该值得注意的也就是数据的输入是通过多组输入,这就使得我们写代码时必须通过再嵌套一个循环,...

登录查看完整内容


登录后发布评论

3 条评论
snake
2024年3月4日 09:53

yes

赞(0)
阿离
2024年3月3日 11:30

牛逼,没考虑到0

赞(0)
show_maker
2024年2月21日 16:20

牛批啊老哥,你这么一说我就明白了

赞(1)