蓝桥杯 Day2 Java组 排序和排列
2022/1/8 17:04:55
本文主要是介绍蓝桥杯 Day2 Java组 排序和排列,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
第一题 计算阶乘 n!
输入一个正整数 n,输出 n!的值。n<=1000。
1. 定义一个大数组A[]来存大数,数组的一个元素存大数的一位。例如A[0]存个位,A[1]存十位,A[2]存百位,等等。
2. 那么A[]需要定义成多大?也就是说,1000!有多少位?可以自己估计,不过,可以用 windows 自带的计算器能直接算出来,1000! ≈ 4×10^{2567}。代码中定义一个更大的A[10000]。
3. 模拟乘法计算,处理进位:例如356×8。先计算个位的6×8,得48,其中个位的8等于 48%10=8,进位的4等于48/10=4。见我代码中的10\sim 13行,这几行实际上是处理了两个数的乘法,请仔细分析这几行代码。
4. 按3的计算方法,计算n!。第8行的i遍历了1\sim n,计算n!。
5. 最后打印是,从最高位开始打印。先找到最高位,即第一个不等于0的数,然后从高位往最低位打印。
import java.util.Scanner; public class Main { public static void main(String[] args) { int a[] = new int[15000]; for(int i = 1;i<=10000;i++){ a[i] = 0; } int flag = 0; Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); a[1] = 1; for (int i = 1; i <= n; i++) { int plus = 0;//最开始进位为0 for (int j = 1; j <= 10000; j++) { a[j] = a[j] * i + plus; plus = a[j] / 10; a[j] = a[j] % 10; } } for (int i = 10000; i >= 1; i--) { if (a[i] != 0) { flag = i; break; } } for (int i = flag; i >= 1; i--) { System.out.print(a[i]); } } }
同时,java里有可以处理大数的类
import java.math.BigInteger; import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); BigInteger bigInteger = new BigInteger("1"); for(int i = 1;i<=n;i++){ bigInteger=bigInteger.multiply(new BigInteger(String.valueOf(i)));//参数要改成字符串 } System.out.println(bigInteger); } }
第二题 高精度加法(ps idea格式化代码 CRTL+ALT+L)
输入两个整数 a 和 b,输出这两个整数的和。a 和 b 都不超过 100 位。
还是使用BigInteger类来做简单(当然和python还是比不了)
import java.math.BigInteger; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); BigInteger bigInteger1 = new BigInteger(scanner.next());//scanner.next是接受字符串的 BigInteger bigInteger2 = new BigInteger(scanner.next()); System.out.println(bigInteger1.add(bigInteger2)); } }
对Java 数组的排序通常用 Arrays.Sort()
第三题 拼数
设有 n 个正整数 a1...an,请将它们联接成一排,相邻数字首尾相接,使得组成的整数最大。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] nums = new int[n]; for(int i = 0; i < n; i++) nums[i] = sc.nextInt(); String[] s = new String[n]; String ans = ""; for(int i = 0; i < n; i++) s[i] = nums[i] + "";//将数字转换成为字符串 for(int i = 0; i < n - 1; i++) //比较 for(int j = i + 1; j < n; j++) if((s[j] + s[i]).compareTo(s[i] + s[j]) < 0) {//比两个字符串(长度相等)的大小 String temp = s[j]; s[j] = s[i]; s[i] = temp; } for(int i = n - 1; i >= 0; i--)//连字符串 ans += s[i]; System.out.println(ans);//输出 } }
这篇关于蓝桥杯 Day2 Java组 排序和排列的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27数据结构与算法面试题详解及练习
- 2024-12-27网络请求面试题详解与实战
- 2024-12-27数据结构和算法面试真题详解与实战教程
- 2024-12-27网络请求面试真题解析与实战教程
- 2024-12-27数据结构和算法大厂面试真题详解与实战指南
- 2024-12-27TS大厂面试真题解析与应对策略
- 2024-12-27TS大厂面试真题详解与解析
- 2024-12-27网站安全入门:如何识别和修复漏洞
- 2024-12-27SQL注入基础教程
- 2024-12-27初学者指南:理解和修复跨域漏洞