POJ 1396 Simple Arithmetics
这是一道大数模拟题,所以就想用Java来写写。于是各种TLE。
无奈就研究怎样才不会TLE。
注解一下关于Java的文件操作:
1、正常的输入输出(效率不高)
import java.util.Scanner; import java.io.*; public class Main { static private final String INPUT = "data1.in"; static private final String OUTPUT = "1.out"; public static void main(String[] args) { FileInputStream instream = null; //建立文件输入对象 PrintStream outstream = null; //建立屏幕输出对象 try { instream = new FileInputStream(INPUT); //初始化文件输入对象 outstream = new PrintStream(new FileOutputStream(OUTPUT)); //初始化屏幕输出对象输出到文件 System.setIn(instream); System.setOut(outstream); } catch (Exception e) { System.err.println("Error Occurred."); //如果访问文件有异常就输出并退出 } Scanner cin = new Scanner(System.in); while (cin.hasNext()) { //判断是否到文件结尾 String s = cin.next(); //输入输出 System.out.println(s); } } }
2、Buffer输入输出(效率高):
import java.io.*; public class Main { static private final String INPUT = "data1.in"; static private final String OUTPUT = "1.out"; public static void main(String[] args) throws IOException { BufferedReader read = null; //建立文件输入对象 PrintStream outstream = null; //建立屏幕输出对象 try { read = new BufferedReader(new FileReader(INPUT)); outstream = new PrintStream(new FileOutputStream(OUTPUT)); //初始化屏幕输出对象输出到文件 System.setOut(outstream); } catch (Exception e) { System.err.println("Error Occurred."); //如果访问文件有异常就输出并退出 } StringBuffer s = new StringBuffer(""); //StringBuffer初始化 String string; while (null != (string = read.readLine())) { //读取数据时每次读一行 s.append(string); //加入到 StringBuffer 里面 s.append("\n"); //格式化输出每一行都要有回车 } System.out.println(s);//整体输出StringBuffer } }
就有了下面的AC代码:
import java.math.BigInteger; import java.util.Scanner; import java.io.*; import javax.jws.soap.SOAPBinding; public class Main { static private final String INPUT = "data1.in"; static private final String OUTPUT = "1.out"; public static void main(String[] args) throws IOException { FileInputStream instream = null; PrintStream outstream = null; /*try { instream = new FileInputStream(INPUT); outstream = new PrintStream(new FileOutputStream(OUTPUT)); System.setIn(instream); System.setOut(outstream); } catch (Exception e) { System.err.println("Error Occurred."); }*/ int i, j, t; char cc = 0; BigInteger a = BigInteger.ZERO; BigInteger b = BigInteger.ZERO; BigInteger c = BigInteger.ZERO; //Scanner cin = new Scanner(System.in); BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); //BufferedReader read = new BufferedReader(new FileReader(INPUT)); //String s = cin.next(); //System.out.println(s); t = Integer.valueOf(read.readLine()); while (t--!=0) { StringBuffer s0 = new StringBuffer(); String str = read.readLine(); String tmp; for (i = 0; i <= str.length(); i++) { if (str.charAt(i) == '+' || str.charAt(i) == '*' || str.charAt(i) == '-') { cc = str.charAt(i); break; } } if (cc == '+') { String[] strs = str.split("\\+"); a = new BigInteger(strs[0]); b = new BigInteger(strs[1]); c = a.add(b); Integer min = 0; tmp = String.valueOf(c); if (min < tmp.length()) { min = tmp.length(); } if (min < strs[0].length()) { min = strs[0].length(); } if (min < strs[1].length() + 1) { min = strs[1].length() + 1; } for (i = 0; i < min - strs[0].length(); i++) { //s0.append(" "); s0.append(" "); } //System.out.println(strs[0]); s0.append(strs[0]); s0.append("\n"); for (i = 0; i < min - strs[1].length() - 1; i++) { //s0.append(" "); s0.append(" "); } //System.out.println("+" + strs[1]); s0.append("+"); s0.append(strs[1]); s0.append("\n"); for (i = 0; i < min; i++) { //s0.append("-"); s0.append("-"); } //System.out.println(); s0.append("\n"); for (i = 0; i < min - tmp.length(); i++) { s0.append(" "); } //System.out.println(tmp); s0.append(tmp); s0.append("\n"); } else if (cc == '-') { String[] strs = str.split("\\-"); a = new BigInteger(strs[0]); b = new BigInteger(strs[1]); c = a.subtract(b); Integer min = 0; Integer min2=strs[1].length()+1; tmp = String.valueOf(c); if(min2<tmp.length()) { min2=tmp.length(); } if (min < tmp.length()) { min = tmp.length(); } if (min < strs[0].length()) { min = strs[0].length(); } if (min < strs[1].length() + 1) { min = strs[1].length() + 1; } for (i = 0; i < min - strs[0].length(); i++) { s0.append(" "); } //System.out.println(strs[0]); s0.append(strs[0]); s0.append("\n"); for (i = 0; i < min - strs[1].length() - 1; i++) { s0.append(" "); } //System.out.println("-" + strs[1]); s0.append("-"); s0.append(strs[1]); s0.append("\n"); for(i=0;i<min-min2;i++) { s0.append(" "); } for (i = 0; i < min2; i++) { s0.append("-"); } //System.out.println(); s0.append("\n"); for (i = 0; i < min - tmp.length(); i++) { s0.append(" "); } //System.out.println(tmp); s0.append(tmp); s0.append("\n"); } else if (cc == '*') { String[] strs = str.split("\\*"); a = new BigInteger(strs[0]); b = new BigInteger(strs[1]); c = a.multiply(b); Integer min = 0; tmp = String.valueOf(c); int len = tmp.length(); if(len<strs[1].length()+1) { len=strs[1].length()+1; } min=strs[1].length()+1; for (i = 0; i < len - strs[0].length(); i++) { s0.append(" "); } //System.out.println(strs[0]); s0.append(strs[0]); s0.append("\n"); for (i = 0; i < len - strs[1].length() - 1; i++) { s0.append(" "); } //System.out.println("*" + strs[1]); s0.append("*"); s0.append(strs[1]); s0.append("\n"); if (strs[1].length() != 1) { if (len < min) len = min; int le2 = strs[1].length(); BigInteger d = BigInteger.ZERO; for (i = 0; i < le2; i++) { d = BigInteger.valueOf(Long.valueOf(String .valueOf(strs[1].charAt(le2 - 1 - i)))); d = d.multiply(a); String tmp2 = String.valueOf(d); if(i==0) { if(min<tmp2.length()) { min=tmp2.length(); } for (j = 0; j < len - min; j++) { s0.append(" "); } for (j = 0; j < min; j++) { s0.append("-"); } // System.out.println(); s0.append("\n"); } for (j = 0; j < len - tmp2.length() - i; j++) { s0.append(" "); } //System.out.println(tmp2); s0.append(tmp2); s0.append("\n"); } for (i = 0; i < len - tmp.length(); i++) { s0.append(" "); } for (i = 0; i < tmp.length(); i++) { //System.out.printf("-"); s0.append("-"); } //System.out.println(); s0.append("\n"); } else { int min2=tmp.length(); if(min2<strs[1].length()+1) { min2=strs[1].length()+1; } for (i = 0; i < len - min2; i++) { s0.append(" "); } for (i = 0; i < min2; i++) { //System.out.printf("-"); s0.append("-"); } //System.out.println(); s0.append("\n"); } for (i = 0; i < len - tmp.length(); i++) { s0.append(" "); } //System.out.println(c); s0.append(c); s0.append("\n"); } //if(t-1!=0)System.out.println(); System.out.println(s0); //System.out.println("\r"); } //} } }