牛牛打響指(大數)

HowieLee59發表於2018-10-17

牛牛在地上撿到了一個手套,他帶上手套發現眼前出現了很多個小人,當他打一下響指,這些小人的數量就會發生以下變化:如果小人原本的數量是偶數那麼數量就會變成一半,如果小人原本的數量是奇數那麼數量就會加一。現在牛牛想考考你,他要打多少次響指,才能讓小人的數量變成1。 

輸入描述:

每個輸入包含一個測試用例。
輸入的第一行包括一個正整數,表示一開始小人的數量N(1<=N<=10^100)。

輸出描述:

對於每個用例,在單獨的一行中輸出牛牛需要打多少次響指才能讓小人的數量變成1。

示例1

輸入

10000

輸出

20

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;

public class Main{
	public static void main(String[] args) throws IOException {
		BufferedReader sc = new BufferedReader(new InputStreamReader(System.in));
		String ss = sc.readLine();
		BigInteger b = new BigInteger(ss);
		int sum = 0;
        BigInteger one = new BigInteger("1");
        BigInteger two = new BigInteger("2");
		while(b.compareTo(one) > 0) {
			if(b.mod(two).compareTo(one) != 0) {
				b = b.divide(two);
			}else {
				b = b.add(one);
			}
			sum++;
		}
		System.out.println(sum);
		sc.close();
	}
}

使用了快取記憶體與Java中大數的計算方法。(Mark)

相關文章