PKU 1537-Identifying Legal Pascal Real Constants

問題概要

ある実数が正しい実数か判定せよ

解法

整数を抽出関数を作りそれを組み合わせる.

実装(Java)

import java.util.*;
import java.math.*;
import java.io.*;
import java.util.regex.*;
import static java.lang.Math.*;
import static java.util.Arrays.*;
import static java.lang.System.*;

public class Main {
	Scanner input;
	int nextval(String s,int x){
		if(x>=s.length())return -1;
		if(s.charAt(x)=='+'||s.charAt(x)=='-')x++;
		if(x>=s.length())return -1;
		if(s.charAt(x)>='0'&&s.charAt(x)<='9');
		else
			return -1;
		while(x<s.length()&&s.charAt(x)>='0'&&s.charAt(x)<='9')x++;
		return x;
	}
	void run(){
		input=new Scanner(System.in);
		while(input.hasNext()){
			String s=input.next(),back=s;
			s=s.toLowerCase();
			if(s.equals("*"))break;
			int j=0;
			Boolean ans=false;
			j=nextval(s,j);
			if(j==-1){
				ans=false;
			}else{
				if(j<s.length()&&s.charAt(j)=='.'){
					j++;
					ans=true;
					j=nextval(s,j);
				}
				if(j!=-1&&j<s.length()){
					if(s.charAt(j)=='e'){
						j++;
						ans=true;
						j=nextval(s,j);
					}
				}
			}
			if(ans&&j==s.length()){
				printf("%s is legal.\n",back);
			}else{
				printf("%s is illegal.\n",back);
			}
		}
	}

	void printf(String format,Object... args){
		System.out.printf(format, args);
	}

	public static void main(String[] args) {
		new Main().run();
	}

}