PAT——1049. 數列的片段和
阿新 • • 發佈:2019-01-07
給定一個正數數列,我們可以從中擷取任意的連續的幾個數,稱為片段。例如,給定數列{0.1, 0.2, 0.3, 0.4},我們有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 這10個片段。
給定正整數數列,求出全部片段包含的所有的數之和。如本例中10個片段總和是0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。
輸入格式:
輸入第一行給出一個不超過105的正整數N,表示數列中數的個數,第二行給出N個不超過1.0的正數,是數列中的數,其間以空格分隔。
輸出格式:
在一行中輸出該序列所有片段包含的數之和,精確到小數點後2位。
輸入樣例:
4 0.1 0.2 0.3 0.4
輸出樣例:
5.00
1 package com.hone.basical; 2 3 import java.util.Scanner; 4 import java.util.Stack; 5 6 /** 7 * 題目中規定:數字最長為100位,則通過一般的數肯定會越界,可以考慮使用字串 8 * 這類題目都可以考慮利用字串來處理資料的進位制轉化。 9 * @author Xia 10 * 11 */ 12 public class basicalLevel1048encryptNUm2 {13 14 public static void main(String[] args) { 15 16 Scanner in = new Scanner(System.in); 17 String a = in.next(); //用字串a表示數A 18 String b = in.next(); //用字串b表示數B 19 in.close(); 20 21 int i = a.length() - 1; 22 int j = b.length() - 1;23 24 //首先補全位數 25 if (i > j) { 26 int c = i - j; 27 while (c != 0) { 28 b = "0" + b; 29 c--; 30 } 31 } else if (i < j) { 32 int c = j - i; 33 while (c != 0) { 34 a = "0" + a; 35 c--; 36 } 37 } 38 39 int index = b.length() - 1; // 採用一種倒敘的方法 40 boolean isOdd = true; 41 Stack<String> stack = new Stack<>(); 42 while (index >= 0) { 43 if (isOdd) { 44 isOdd = false; 45 int cNumber = a.charAt(index) - '0' + b.charAt(index) - '0'; 46 String r = null; 47 switch (cNumber) { 48 case 10: 49 r = "J"; 50 break; 51 case 11: 52 r = "Q"; 53 break; 54 case 12: 55 r = "K"; 56 break; 57 default: 58 r = "" + cNumber % 13; 59 break; 60 } 61 62 stack.push(r); 63 } else { 64 isOdd = true; 65 int cNumber = (b.charAt(index) - a.charAt(index) + 10) % 10; 66 String r = "" + cNumber; 67 stack.push(r); 68 } 69 index--; 70 } 71 72 while (!stack.isEmpty()) { 73 System.out.print(stack.pop()); 74 } 75 } 76 77 }