Lowest Bit
来源:互联网 发布:js object to list 编辑:程序博客网 时间:2024/06/07 05:51
Problem Description
Given an positive integer A (1 <= A <= 100), output the lowest bit of A.
For example, given A = 26, we can write A in binary form as 11010, so the lowest bit of A is 10, so the output should be 2.
Another example goes like this: given A = 88, we can write A in binary form as 1011000, so the lowest bit of A is 1000, so the output should be 8.
For example, given A = 26, we can write A in binary form as 11010, so the lowest bit of A is 10, so the output should be 2.
Another example goes like this: given A = 88, we can write A in binary form as 1011000, so the lowest bit of A is 1000, so the output should be 8.
Input
Each line of input contains only an integer A (1 <= A <= 100). A line containing "0" indicates the end of input, and this line is not a part of the input data.
Output
For each A in the input, output a line containing only its lowest bit.
Example Input
26880
Example Output
28
个人想法:
我理解下的最低位即0 0 0... 后出现1时,则最低位为1000,则为8。 因此我可以计下0出现的次数n,0 0 0则计数为3,并使用pow函数,求出2的n次方数即得答案。但在多次提交后出现“超时”现象。
超时现象代码如下:
#include<stdio.h> #include<math.h> int main(){ int A,num; while(scanf("%d",&A)!=EOF){ int i=0; while(A%2==0){ i++; A=A/2; } num=pow(2,i); printf("%d",num); } return 0; }
再次调试后,出现“答案错误”现象。
答案错误现象代码如下:
#include<stdio.h> #include<math.h> int main(){ int A,num; scanf("%d\n",&A); while(A){ int i=0; while(A%2==0){ i++; A=A/2; } num=pow(2,i); printf("%d",num); scanf("%d\n",&A); } return 0; }
后请求学霸求助后,求得学霸思路:
分类讨论1.当输入的A%2!=0时,即A为奇数,知此时的二进制转换数为1,最低位也为1;
A为偶数时,1.该偶数%2==0,但某时刻(A/2)%2时出现!=0的情况时,即可知该数的最低位为2;
2.该偶数%2==0,而且在某时刻依然(A/2)%2==0,则可利用个人想法中的
while(A%2==0){A = A/2;i++;}num = pow(2,i);printf("%d\n",num); 代码。
学霸思路代码:
#include<stdio.h>#include<math.h> int main(){int A;long long num;scanf("%d",&A);while(A){int i=0; if(A%2){printf("1\n");}else{if((A/2)%2){printf("2\n");}else{int i = 0;while(A%2==0){A = A/2;i++;}num = pow(2,i);printf("%d\n",num);}}scanf("%d",&A);}return 0;}
若出现时间超时现象,可写成while(scanf("%d",&A!=EOF),A){
}#include<iostream>using namespace std;int main(){ int num,sum,i,j,temp; while(cin>>num && num!=0) { sum=1;temp=0; for(i=1;temp==0;i++) { temp=num%2; //arr[i]=num%2; num=num/2; } //cout<<"i="<<i<<endl; //for(;;i--) //if(arr[i]==1) //break; for(j=1;j<i-1;j++) sum=sum*2; cout<<sum<<endl; } return 0;}
大神见此代码时,求 如何解决个人想法中出现超时或者答案错误的情况?
阅读全文
0 0
- Lowest Bit
- Lowest Bit
- 【Lowest Bit】
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- Lowest Bit
- zoj 2417 Lowest Bit
- HDU 1196 Lowest Bit
- zoj 2417 Lowest Bit
- HDU 1196 ( Lowest Bit )
- 524. Longest Word in Dictionary through Deleting
- 《挑战程序设计竞赛》阅读笔记二 之 ALDS1_2_D Shell Sort
- 欢迎使用CSDN-markdown编辑器
- js 使用for...in...遍历对象时需要注意的一个问题:遍历时莫名其妙的多了属性
- elasticsearch 学习博客系列<二> ES 中 index 设置 Mapping(表结构)
- Lowest Bit
- android系统自带图片裁剪的注意事项(E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!)
- Discovery:在vs2013平台上应用VideoInput第三方库
- 虚拟机相关问题日志
- 【算法题】双向冒泡排序
- TouchSlop
- Android控件——多状态按钮ToggleButton
- 单例设计模式
- HDU-1233-还是畅通工程(prim)