华为优招:电报中用点(.)表示1,用中划线(-)表示0,序列中间用#号分隔;

来源:互联网 发布:手机淘宝如何合并付款 编辑:程序博客网 时间:2024/04/28 23:46
字符 . 代表1,字符 - 代表 0。输入类型“–.#。#-.-”的字符串,字符#是分隔符,可能会有连续的多个#。把形如“–.”的无符号二进制转换成十进制数字后,有张图表,根据这张图表上的映射关系,输出相应的英文字符(编程的时候要苦逼的把这张表手工输入到map里有没有。。。)。如果输入只是一连串的#,则输出一个空字符串,如果转换后的整数超出了图
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNext()) {String input = sc.nextLine();String result= trans(input);System.out.println(result);}sc.close();}private static String trans(String input) {if(input ==null || input.length()==0)return "ERROR";char[] charArray = input.toCharArray();int count=0;for (int i = 0; i < charArray.length; i++) {if(charArray[i]=='#')count++;if(charArray[i]!='#' && charArray[i]!='.'&&charArray[i]!='-')return "ERROR";}String nothing ="";if(count == charArray.length)return nothing;StringBuilder sb = new StringBuilder();String[] split = input.split("#");for (int i = 0; i < split.length; i++) {if (split[i].equals("")||split[i].equals(" ")) {continue;}else{String back= binarytrans(split[i]);if(back.equals("ERROR"))return back;sb.append(back);}}return sb.toString();}private static String binarytrans(String str) {String[] myDictionary =new String[]{"F","G","R","S","T","L","M","N","O","P","Q","W","X","Y","Z","U","A","G","H","I","J","K","B","C","D","E","l","m","n","o","p","i","j","k","f","g","h","a","b","c","d","e","q","r","w","x","y","z","s","t","u","v"};StringBuilder sb = new StringBuilder();char[] cs = str.toCharArray();for (int i = 0; i < cs.length; i++) {if(cs[i]=='.'){sb.append("1");}else if (cs[i]=='-') {sb.append("0");}}int num=Integer.valueOf(sb.toString(),2);if(num<0 || num>51)return "ERROR";if(num>=0 && num<=51)   return myDictionary[num];return "ERROR";}}

表里的0-51得范围,则输出“ERROR”
阅读全文
0 0
原创粉丝点击