蓝桥杯:1.幸运数字(Java)

发布时间:2024年01月23日

题目描述:

哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。
例如126是十进制下的一个哈沙德数,因为(126)1o mod (1+2+6)=0; 126也是八进制下的哈沙德数,因为(126)10= (176)s,(126)10 mod (1+7+6)一0;同时126也是16进制下的哈沙德数,因为(126)10 = (7e)16,(126)1o mod (7+e)=0。
小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为哈沙德数,那么这个数字就是幸运数字,第1至第10个幸运数字的十进制表示为:1,2,4,6,8,40,48,72,120,126…。
现在他想知道第2023个幸运数字是多少?你只需要告诉小蓝这个整数的十进制表示即可。

答案:

215040

考点:

Java中的进制转换函数Integer.toString可以将一个整数转换为指定进制的字符串表示形式。
该函数的用法如下:

public static String toString(int value, int radix)

其中,value是要转换的整数,radix是目标进制。

代码实现:

public class Main{
	public static void main(String[] args) {
		int cnt = 0;// 哈沙德数的个数
		int num = 0;//幸运数
		while (cnt < 2023) {
			num++;
			// 计算二进制
			String s1 = Integer.toString(num, 2);
			if (num % sum(s1) == 0) {
				// 对二进制数的数位之和取余数为0
				// 计算八进制
				String s2 = Integer.toString(num, 8);
				if (num % sum(s2) == 0) {
					// 对八进制数的数位之和取余数为0
					// 计算十进制
					if (num % sum(num) == 0) {
						// 对十进制数的数位之和取余数为0
						// 计算十六进制
						String s3 = Integer.toString(num, 16);
						if (num % sum(s3) == 0) {
							// 对十六进制数的数位之和取余数为0
							cnt++;
						}
					}
				}
			}

		} // while
		//输出
		System.out.println(num);//215040

	}

	// 计算一个数的各位之和的函数:计算二进制,八进制,十六进制的情况
	public static int sum(String string) {
		int sum = 0;
		for (int i = 0; i < string.length(); i++) {
			//进行字母串切割,由ASCII码计算具体的数位值
			if (string.charAt(i) >= '0' && string.charAt(i) <= '9') {
				sum += (string.charAt(i) - '0');
			} else {
				// 16进制中的a~e对饮10~15
				sum += (string.charAt(i) - 'a' + 10);
			}
		}
		return sum;
	}

	// 计算一个数的各位之和的函数:重载方法,用于计算十进制的情况
	public static int sum(int n) {
		int sum = 0;
		while (n != 0) {
			sum += n % 10;//取个位数累加
			n /= 10;//原数除十
		}
		return sum;
	}
}
文章来源:https://blog.csdn.net/qq_61888137/article/details/135790926
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。