2022年第四届全国高校计算机能力挑战赛区域赛(java)
第二套试卷
编程的个人解答源码及思路个人解答源码及思路
1. 科学计数法的显示(实现类似Excel单元格的科学记数法功能)。从键盘上输入两个数值字符串(均为正整数),显示对应的科学记数法字符串。例如:10000 2,10000表示数,2表示小数点位数,显示为1.00E+4。注意:科学记数法必须考虑四舍五入问题。例如输入为12345 3,显示为1.235E+4,输入为99995 3,显示为1.000E+5,而不是10.000E+4。
输入说明:N(数值字符串) M(小数点位数)
输出说明:科学记数法对应的字符串
输入样例1:123456 3
输入样例2:314159 4
输出样例1:1.235E+5
输出样例2:3.1416E+5
源码:
1. import java.util.Scanner;
2. public class FirstProblemPreliminary {
3. public static void main(String[] args) {
4. Scanner sc = new Scanner(System.in);
5. String[] strArray = sc.nextLine().split("\\s+");
6. String digitalStr = strArray[0];
7. Integer decimalNumber = Integer.valueOf(strArray[1]);
8. int length = digitalStr.length();
9. int max = Math.max(length - 1, decimalNumber);
10. char[] secondPartChars = new char[max];
11. Integer[] secondPartInts = new Integer[max];
12. for (int i = 0; i < max; i++) {
13. secondPartChars[i] = '0';
14. }
15. for (int i = 1; i < length; i++) {
16. secondPartChars[i - 1] = digitalStr.charAt(i);
17. }
18. for (int i = 0; i < max; i++) {
19. secondPartInts[i] = Integer.valueOf(String.valueOf(secondPartChars[i]));
20. }
21. boolean flag = false;
22. if (decimalNumber < length - 1) {
23. flag = (secondPartInts[decimalNumber] >= 5) ? true : false;
24. }
25. for (int i = decimalNumber - 1; i >= 0; i--) {
26. if (flag) {
27. secondPartInts[i] = secondPartInts[i] + 1;
28. if (secondPartInts[i] == 10) {
29. secondPartInts[i] = 0;
30. flag = true;
31. } else {
32. flag = false;
33. }
34. }
35. }
36. //处理第一部分
37. char firstPartChar = digitalStr.charAt(0);
38. int firstPartCharInts = Integer.valueOf(String.valueOf(firstPartChar));
39. boolean flag1 = false;
40. if (flag) {
41. firstPartCharInts = firstPartCharInts + 1;
42. if (firstPartCharInts == 10) {
43. firstPartCharInts = 1;
44. flag1 = true;
45. }
46. }
47. //处理最后部分
48. int lastPartNumber = length - 1;
49. if (flag1) {
50. lastPartNumber = lastPartNumber + 1;
51. }
52. String lastPartStr = "E+".concat(String.valueOf(lastPartNumber));
53. //打印输出
54. System.out.print(firstPartCharInts);
55. System.out.print(".");
56. for (int i = 0; i < decimalNumber; i++) {
57. System.out.print(secondPartInts[i]);
58. }
59. System.out.println(lastPartStr);
60. }
61. }
思路:将转换后的科学计数法字符串分为三个部分,以“1.235E+5”为例,“1” 为第一部分,“235”为第二部分,“E+5”为第三部分;由于涉及到四舍五入的进位问题,第二部分可能会影响第一部分,第一部分可能会影响第三部分,所以先处理第二步部分,再处理第一部分,最后处理第三部分。
2.编写程序完成以下功能:输入正整数a的值,若a为偶数,求aa+aaaa+aaaaaa+
直到a个a的累加和;若a为奇数,求a+aaa+aaaaa+直到a个a的累加和。
输入说明:1至9之间的正整数a。
输出说明:符合规律要求的连加算式(包含加数、运算符号和累加和,详见输出样例)
输入样例1:5
输入样例2:6
输出样例1:5+555+55555=56115
输出样例2:66+6666+666666=673398
源码:
1. import java.util.Scanner;
2. public class SecondProblemPreliminary {
3. public static void main(String[] args) {
4. Scanner sc = new Scanner(System.in);
5. int number = Integer.valueOf(sc.nextLine());
6. int finalSum=0;
7. String finalPattern="";
8. if (number%2==0){
9. for(int i=2;i<=number;i+=2){
10. int stepNumber=stepNumber(number,i);
11. finalSum=finalSum+stepNumber;
12. finalPattern=finalPattern.concat(String.valueOf(stepNumber)).concat("+");
13. }
14. }
15. if (number%2==1){
16. for(int i=1;i<=number;i+=2){
17. int stepNumber=stepNumber(number,i);
18. finalSum=finalSum+stepNumber;
19. finalPattern=finalPattern.concat(String.valueOf(stepNumber)).concat("+");
20. }
21. }
22. finalPattern=finalPattern.substring(0,finalPattern.length()-1);
23. finalPattern=finalPattern.concat("=").concat(String.valueOf(finalSum));
24. System.out.println(finalPattern);
25. }
26. static int stepNumber(int number,int times){
27. int sum=0;
28. for(int i=0;i
点击显示更多内容>>
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号