主打的就是一个短小精悍
2024-02-16 21:51:47
发布于:浙江
91阅读
0回复
0点赞
int main() {
int n;
scanf("%d",&n);
if (n % 2 == 1 || n == 0) printf("-1");
else for (int j = 29; j >= 0; j--) if (n >> j & 1) printf("%d ", 1 << j);
}
不是我不想注释,主要是我之前写的代码现在自己看不懂了(悲),有人能读懂吗?
望大佬能讲解下
全部评论 5
首先,读入n
然后,如果n是奇数(拆分项包含2^0)就直接输出-1
否则就从大到小遍历所有可能的拆分项(29个),用n>>j&1来判断是否有这一项(变为二进制后的n在第j位上是否为1),如果符合就输出这一项转换为10进制的结果2026-09-14 来自 江西
0if里的有没有大佬解释一下,外面的看的懂
2026-08-12 来自 广东
0n%21是判断n是否为奇数,后面的n0是判断n是否为零,因为奇数和零并不会有优秀的拆分,故
使用if语句来排除这种情况,如果n为奇数或零就直接输出-1,这样一来剩下的数就都会有优秀的拆分,再使用for循环枚举出答案2026-08-13 来自 广东
0
真能AC!!!
啥原理呀
大佬解释一下2026-08-12 来自 广东
0hi
2026-05-11 来自 浙江
0像是枚举
2025-10-07 来自 湖北
0
















有帮助,赞一个