L1-108 零头就抹了吧 - java

题目解析

计算老板抹掉零头后应收的钱

解题思路

方法1: 位运算
通过位运算的方法,每次将这个数在二进制中最后一个1变为0

操作 二进制数
n 1010
n - 1 1001
n & (n - 1) 1000

方法2: 累乘
通过累乘的方法,每次对一个数进行 *2 的操作,直至这个数 *2 后超过给定的 n

代码

方法1: 位运算

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		int n = sc.nextInt();
		while ((n & (n - 1)) != 0)
		{
			n = n & (n - 1);
		}
		out.println(n);

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}

方法2: 累乘

import java.io.*;
import java.math.*;
import java.util.*;

public class Main
{

	public static void main(String[] args)
	{
		int n = sc.nextInt();
		int ans = 1;
		while (ans * 2 <= n)
		{
			ans = ans * 2;
		}
		out.println(ans);

		out.flush();
		out.close();
	}

	static Scanner sc = new Scanner(System.in);
	static PrintWriter out = new PrintWriter(System.out);
}


团体程序设计天梯赛-练习集-java

赞赏