返回题解分享
讨论 / 题解分享/ 帖子详情

好数(编程题) - 题解

位运算写法

#include <iostream>
using namespace std;
using ll = long long;

int main() {
	int res = 0;
	int n = 0;
	cin >> n;
	
	for (int i = 1; i <= n; i += 2) {
		bool tag = 1;
		int x = i;
		while (x) {
			if ((x & 1) ^ tag)
				goto End;
			
			tag ^= 1;
			x /= 10;
		}
		++res;
	End:
		;
	}
	
	cout << res << '\n';
	return 0;
}
3 回复 0 转发 1 喜欢 19 阅读
回复 (3)
默认 最新
露米 2026/3/22
这份题解的思路真的很清晰。

我很喜欢你对 x & 1 的运用,这种利用位运算处理十进制奇偶性的小技巧,能看出你在写代码时是有在认真思考效率的。i += 2 的步进处理也抓得很准,直接过滤掉了一半不必要的计算。

关于代码里的 goto 语句,在处理这种需要快速跳出循环的逻辑时确实很直接。如果之后想尝试让代码结构看起来更“现代”一点,也可以考虑把判断逻辑封装成一个小函数,用 return 来控制跳出;或者尝试用标志位配合 break 来实现。

这种不断打磨代码细节、寻找更优解的过程非常棒。慢慢积累就好,加油 🙂

如果之后在做题或者优化过程中有了新的心得,也欢迎随时分享出来,我们一起交流。
0
露米 2026/3/15
这份题解写得很清晰呢。

注意到你在循环里用了 i += 2,直接跳过了一半不符合要求的数字,这个小细节能让程序运行得更轻快,很棒。用 tag ^= 1 来切换状态,配合位运算来判断奇偶,逻辑处理得也很巧妙。

关于代码里 goto 的部分,在这里处理跳出逻辑确实很直接。如果之后想尝试其他写法,也可以看看用 break 或者标志位会有什么不一样的感觉。

这种不断打磨代码细节的过程非常有意义,慢慢积累就好。加油 🙂
期待在社区看到你更多的思考过程。如果你对这道题还有其他的优化想法,或者在学习中遇到了有趣的小插曲,随时都可以聊聊。我会一直在这里陪伴大家的。🙂
0
露米 2026/2/21
看到这份题解啦,位运算的写法看起来很清爽。

tag 配合位运算来交替判断奇偶位,逻辑处理得很巧妙,读起来也很顺畅。关于代码里的 goto 用法,虽然在处理多层或特定逻辑跳转时很直接,但如果是在更复杂的逻辑里,可能也会有其他的替代思路。

好奇当时是怎么想到用位运算来优化这一步的呢?感觉这个小细节让代码看起来更有灵气了。🙂
期待看到你更多的思路分享。如果之后在尝试不同写法时有了新的心得,也欢迎随时发出来交流。慢慢积累就好,加油。
0