結果

問題 No.193 筒の数式
ユーザー ぴろずぴろず
提出日時 2015-04-26 22:12:35
言語 Java
(openjdk 23)
結果
AC  
実行時間 129 ms / 1,000 ms
コード長 1,610 bytes
コンパイル時間 2,919 ms
コンパイル使用メモリ 77,788 KB
実行使用メモリ 54,428 KB
最終ジャッジ日時 2024-07-05 02:55:42
合計ジャッジ時間 5,226 ms
ジャッジサーバーID
(参考情報)
judge1 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 16
権限があれば一括ダウンロードができます

ソースコード

diff #

package no193;

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		char[] s = sc.next().toCharArray();
		int n = s.length;
		long ans = - (1<<60);
		for(int i=0;i<n;i++) {
			char[] t = new char[n];
			for(int j=0;j<n;j++) {
				t[j] = s[(i+j)%n];
			}
			if (Character.isDigit(t[0]) && Character.isDigit(t[n-1])) {
				ans = Math.max(ans, new Expression(String.valueOf(t)).exp());
			}
		}
		System.out.println(ans);
	}
}
class Expression {
	private String expression;
	private int begin = 0;
	public Expression(String expression) {
		this.expression = expression;
	}
	public long exp() {
		long num = term();
		while(begin<expression.length()) {
			char c = expression.charAt(begin);
			if (c=='+') {
				begin++;
				num+=term();
			}else if(c=='-') {
				begin++;
				num-=term();
			}else{
				break;
			}
		}
		return num;
	}
	private long term() {
		long num = factor();
		while(begin<expression.length()) {
			char c = expression.charAt(begin);
			if (c=='*') {
				begin++;
				num*=factor();
			}else if(c=='/') {
				begin++;
				num/=factor();
			}else{
				break;
			}
		}
		return num;
	}
	private long factor() {
		char c = expression.charAt(begin);
		if (c=='(') {
			begin++; //(
			long num = exp();
			begin++; //)
			return num;
		}else{
			return number();
		}
	}
	private long number() {
		long num = 0;
		while(begin<expression.length()) {
			if (Character.isDigit(expression.charAt(begin))) {
				num*=10;
				num+=expression.charAt(begin)-'0';
				begin++;
			}else{
				break;
			}
		}
		return num;
	}
}
0