洛谷题单:【数学1】基础数学问题

(1)P1143 进制转换
java对进制转换有非常好的API,可以实现无限长度的任意进制转换。

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		sc.nextLine();
		String s=sc.nextLine();
		int m=sc.nextInt();
		System.out.println(new BigInteger(s,n).toString(m).toUpperCase());
	}
}

(2)P1469 找筷子
这题如果知道二进制的知识,这道题没有难度。对每个数进行异或运算时,总会留下那个落单的数字。不过这题很恶心,只给了4M的内存,它本意是为了防止用桶排序的方法来做这道题,但它没有考虑java根本不可能在4M内存里做出来。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int n=sc.nextInt();
		int res=sc.nextInt();
		for(int i=1;i<n;i++) {
			res^=sc.nextInt();
		}
		System.out.println(res);
	}
}

(3)P1100 高低位交换
这题很考察对二进制的理解。把高位的16位移到低位,我们可以先把n右移16位,这样高位直接到低位了,而低位直接因为小于0而去掉了。然后我们再把低位的数字右移16位,我们通过取模的方法可以很容易拿到低位。最后我们把两次转换后的数字相加就得到了新的数字。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		long n=sc.nextInt();
		long x=(n>>16)+((n%65536)<<16);
		System.out.println(x);
	}
}

(4)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值