计数器

小爱有一个奇怪的计数器。在第一个时刻计数器显示数字3,在接下来的每一个时刻,屏幕上的数字都会减1,直到减到1为止。

接下来,计数器会重置为上一个计数周期初始值的两倍,然后再每一个时刻减1。具体过程如下图所示:
找出规律,并打印出t时刻计数器的值。

输入描述:

输入为时刻t,一个整形数字。0<t<1e12

输出描述:

计数器显示的值。

思路:可以看出每一列的起始数字组成一个等比数列,
time可以看作是整个等比数列的前n-1项和,然后还有些特殊处理
import java.util.Scanner;

public class Main {


    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int i = scanner.nextInt();
            calc(i);
        }

    }

   private static void calc(int t){
        int time = 3;
        while (t > time){
            t -= time;
            time *= 2;
        }
       System.out.println(time + 1 - t);

   }
}
原文地址:https://www.cnblogs.com/dongma/p/13380864.html