求整數A二進位制的最低位數
阿新 • • 發佈:2018-12-10
題目描述
給出一個整數A,輸出它的最低位數 比如:A= 26,它的二進位制形式為:11010,最低位為10,所以應該輸出2, 再比如 A=92,它的二進位制為:01011100,最低位為:100,所以應輸出4.
輸入描述
每行輸入一個數字A(0 < A < 100),如果輸入0,表示輸入結束,並且最後輸入的0不需要計算。
輸出描述
對於每一個數字A,輸出它的最低位數,也是每行一個
輸入示例
26
92
0
輸出示例
2
4
題目分析
輸入好幾個十進位制數字,轉成二進位制後檢測最低位,需要注意例子中,10輸出的是2,有兩種理解
,一個是1在倒數第二位,再一個是10的十進位制表示2;在看第二行100輸出的是4,所以並不是1所在的位置倒數第三位
十進位制數字
。
解決方案及分析
演算法分析
將之轉成二進位制的string型資料,然後將之轉成char陣列,然後從後向前做匹配,若為零則+1,唯一則跳出迴圈輸出。同時我們知道了1所在的位置n,根據2進位制到10進位制的計算方法可以知道輸出為 。
程式設計實現
import java.util.Scanner;
public class test1 {
public static void main(String []args) {
Scanner scan = new Scanner(System.in);
int arr[] = new int[1000];
String arr1[] =new String[1000];
for (int i= 0;;i++){
int count=1;
arr[i]=scan.nextInt();
if(arr[i]==0)
break;
arr1[i] = Integer.toBinaryString(arr[i]);
//System.out.println(arr1[i]);
char temp[]= arr1[i].toCharArray();
//從後向前匹配,等於0加一,等於1停止,因為是char型,所以應=='0'
for (int k=temp.length;k>=0;k--){
if(temp[k-1]=='0'){
count++;
}else {
break;
}
}
//輸出時轉化為十進位制輸出,為2的(n-1)次方
System.out.println((int)Math.pow(2,count-1));
}
}
}