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");
		}
		//}
	}
}


posted @ 2014-02-16 10:47  、小呆  阅读(273)  评论(0编辑  收藏  举报