UVA - 10718 Bit Mask

来源:互联网 发布:淘宝助手批量上传 编辑:程序博客网 时间:2024/05/16 01:41

题目大意:给出一个  N, 和一个下限 L, 上限 U, 在 [L, U] 之间找一个数, 使得这个数与 N 做或运算之后的数值最大 输出这个数。


解题思路:将 U 转换成二进制,对应的为 0 的地方要填 1, 为 1 的地方填 0, 判断的时候还要考虑上下限的问题。


#include <cstdio>#include <cmath>int main() {unsigned int N, L, U, M;while (scanf("%u%u%u", &N, &L, &U) != EOF) {M = 0;for (int i = log2(U); i >= 0; i--)if ( (M + (1 << i)) <= U && !(N & 1 << i) || M < L && L & 1 << i )M += 1 << i;printf("%u\n", M);}return 0;}


0 0