21天刷題計劃之11.2—牛牛打響指(Java語言描述)
阿新 • • 發佈:2019-01-22
題目描述:
牛牛在地上撿到了一個手套,他帶上手套發現眼前出現了很多個小人,當他打一下響指,這些小人的數量就會發生以下變化:如果小人原本的數量是偶數那麼數量就會變成一半,如果小人原本的數量是奇數那麼數量就會加一。現在牛牛想考考你,他要打多少次響指,才能讓小人的數量變成1。
輸入描述:
每個輸入包含一個測試用例。 輸入的第一行包括一個正整數,表示一開始小人的數量N(1<=N<=10^100)。
輸出描述:
對於每個用例,在單獨的一行中輸出牛牛需要打多少次響指才能讓小人的數量變成1。
示例1
輸入
10000
輸出
20
分析:
本體的資料輸入範圍比較大,使用int 或者long型都會記憶體溢位,所以本體涉及到一種針對大數運算的物件BigInteger,其餘思想和正常運算均相同。
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String str = scan.next(); BigInteger num = new BigInteger(str); System.out.println(getTimes(num)); } scan.close(); } public static int getTimes(BigInteger num) { int count = 0;//計數器 BigInteger one = new BigInteger("1"); BigInteger two = new BigInteger("2"); while(!num.equals(one)){ if(num.mod(two).equals(one)){//模2判斷是否為奇數。 num = num.add(one); }else{ num = num.divide(two);//除運算。 } count++; } return count; } }