首页 > 代码库 > sdut 2841 Bit Problem (水题)
sdut 2841 Bit Problem (水题)
题目
贴这个题是因为看题解有更简单的方法, 我做的时候是直接算的, 也很简单。
贴一下题解吧:
如果一个整数不等于 0,那么该整数的二进制表示中至少有一位是 1。
这个题结果可以直接输出 x - (x&(x-1));
因为x-1 之后二进制下,就是最右边的1变成了0, 最右边的1的 右边所有的0变成了1, 不影响最左边。
我的代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 int main() 8 { 9 int t, n, cnt, x, ca = 1, ans; 10 while(~scanf("%d", &t)) 11 { 12 if(t==0) break; 13 printf("Answer to case%d:\n", ca++); 14 while(t--) 15 { 16 scanf("%d", &n); 17 cnt = 0; 18 while(n) 19 { 20 x = n%2; 21 n /= 2; 22 if(x==1) 23 break; 24 cnt++; 25 } 26 ans = double(pow(2, cnt)); 27 printf("%d\n", ans); 28 } 29 cout<<endl; 30 } 31 return 0; 32 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。