1. 程式人生 > >求整數A二進位制的最低位數

求整數A二進位制的最低位數

題目描述

  給出一個整數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進位制的計算方法可以知道輸出為 2n1

程式設計實現

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)); } } }