您的位置:首页 > 其它

【笔试】今日头条 形式化输出

2017-04-18 20:43 295 查看
题目





解答

import java.text.DecimalFormat;
import java.util.*;

public class Main {
public static void main(String[] args)
{
HashMap<String, String> rsStr = new HashMap<String, String>();
rsStr.put("11", "*");
rsStr.put("12", "*");
rsStr.put("13", "*");
rsStr.put("14", "*");
rsStr.put("15", "*");

rsStr.put("21", "***");
rsStr.put("22", " *");
rsStr.put("23", "***");
rsStr.put("24", "* ");
rsStr.put("25", "***");

rsStr.put("31", "***");
rsStr.put("32", " *");
rsStr.put("33", "***");
rsStr.put("34", " *");
rsStr.put("35", "***");

rsStr.put("41", "* *");
rsStr.put("42", "* *");
rsStr.put("43", "***");
rsStr.put("44", " *");
rsStr.put("45", " *");

rsStr.put("51", "***");
rsStr.put("52", "* ");
rsStr.put("53", "***");
rsStr.put("54", " *");
rsStr.put("55", "***");

rsStr.put("61", "***");
rsStr.put("62", "* ");
rsStr.put("63", "***");
rsStr.put("64", "* *");
rsStr.put("65", "***");

rsStr.put("71", "***");
rsStr.put("72", " *");
rsStr.put("73", " *");
rsStr.put("74", " *");
rsStr.put("75", " *");

rsStr.put("81", "***");
rsStr.put("82", "* *");
rsStr.put("83", "***");
rsStr.put("84", "* *");
rsStr.put("85", "***");

rsStr.put("91", "***");
rsStr.put("92", "* *");
rsStr.put("93", "***");
rsStr.put("94", " *");
rsStr.put("95", "***");

rsStr.put("01", "***");
rsStr.put("02", "* *");
rsStr.put("03", "* *");
rsStr.put("04", "* *");
rsStr.put("05", "***");

rsStr.put("+1", " ");
rsStr.put("+2", " * ");
rsStr.put("+3", "***");
rsStr.put("+4", " * ");
rsStr.put("+5", " ");

rsStr.put("-1", " ");
rsStr.put("-2", " ");
rsStr.put("-3", "***");
rsStr.put("-4", " ");
rsStr.put("-5", " ");

rsStr.put("*1", " ");
rsStr.put("*2", "* *");
rsStr.put("*3", " * ");
rsStr.put("*4", "* *");
rsStr.put("*5", " ");

rsStr.put("/1", " ");
rsStr.put("/2", " *");
rsStr.put("/3", " * ");
rsStr.put("/4", "* ");
rsStr.put("/5", " ");

rsStr.put("=1", " ");
rsStr.put("=2", "****");
rsStr.put("=3", " ");
rsStr.put("=4", "****");
rsStr.put("=5", " ");

rsStr.put(".1", " ");
rsStr.put(".2", " ");
rsStr.put(".3", " ");
rsStr.put(".4", "**");
rsStr.put(".5", "**");

Scanner sc = new Scanner(System.in);
String inStr = sc.nextLine().replace(" ", "");
double rs = calculate(toSuffix(inStr));
if(rs % 1 == 0)
{
int rs1 = (int)rs;
inStr = inStr + "=" + rs1;
}else{
String rs2 = "" + rs;
int index = rs2.indexOf('.');
if(rs2.length() < index + 3)
inStr = inStr + "=" + rs;
else
{
DecimalFormat df = new DecimalFormat("######0.00");
inStr = inStr + "=" + df.format(rs);
}
}

char[] inStrArr = inStr.toCharArray();
String outStr = "";
for(int i = 1; i <= 5; i++)
{
for(int j = 0; j < inStrArr.length; j++)
{
switch(inStrArr[j])
{
case '1':
outStr += rsStr.get("" + '1' + i);
break;
case '2':
outStr += rsStr.get("" + '2' + i);
break;
case '3':
outStr += rsStr.get("" + '3' + i);
break;
case '4':
outStr += rsStr.get("" + '4' + i);
break;
case '5':
outStr += rsStr.get("" + '5' + i);
break;
case '6':
outStr += rsStr.get("" + '6' + i);
break;
case '7':
outStr += rsStr.get("" + '7' + i);
break;
case '8':
outStr += rsStr.get("" + '8' + i);
break;
case '9':
outStr += rsStr.get("" + '9' + i);
break;
case '0':
outStr += rsStr.get("" + '0' + i);
break;
case '+':
outStr += rsStr.get("" + '+' + i);
break;
case '-':
outStr += rsStr.get("" + '-' + i);
break;
case '*':
outStr += rsStr.get("" + '*' + i);
break;
case '/':
outStr += rsStr.get("" + '/' + i);
break;
case '=':
outStr += rsStr.get("" + '=' + i);
break;
case '.':
outStr += rsStr.get("" + '.' + i);
break;
}
if(j != inStrArr.length - 1)
outStr += " ";
}
outStr += "\r\n";
}
System.out.println(outStr);
}

public static List<Object> toSuffix(String s) {
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("+", 0);
map.put("-", 0);
map.put("*", 1);
map.put("/", 1);
List<Object> list = new ArrayList<Object>();
String[] number = s.split("[^\\d]");
String[] operator = s.split("\\d+");
Stack<String> stack = new Stack<String>();
for (int i = 0; i < number.length; i++) {
if (operator[i].length() != 0) {
while (!stack.isEmpty()
&& map.get(operator[i]) <= map.get(stack.peek())) {
list.add(stack.pop());
}
stack.push(operator[i]);
}
list.add(Double.parseDouble(number[i]));
}
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}

public static double calculate(List<Object> list) {
Stack<Double> stack = new Stack<Double>();
for (Object obj : list) {
if (obj instanceof Double) {
stack.push((Double) obj);
} else {
double b = stack.pop();
double a = stack.pop();
if (obj.equals("+"))
stack.push(a + b);
if (obj.equals("-"))
stack.push(a - b);
if (obj.equals("*"))
stack.push(a * b);
if (obj.equals("/"))
stack.push(a / b);
}
}
return stack.pop();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: