Is It a Number
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 1238 Accepted Submission(s): 393
Problem Description
In some programming languages(like C/C++), we define numbers like this:
number -> digits optional_fraction optional_exponent
optional_fraction -> [empty] | .digits
optional_exponent -> [empty] | E digits | E - digits
digits -> digit | digits digit
digit -> [0-9]
Given a string, you have to tell whether it is a legal number.
number -> digits optional_fraction optional_exponent
optional_fraction -> [empty] | .digits
optional_exponent -> [empty] | E digits | E - digits
digits -> digit | digits digit
digit -> [0-9]
Given a string, you have to tell whether it is a legal number.
Input
The first line of input contains an integer T(1<=T<=100) which indicate the number of test cases. Then T test cases follow. Each test case contains one line. Each line contains a string whose length will not exceed 100.
Note: there are no spaces and tabs at the begin and the end of the string.
Note: there are no spaces and tabs at the begin and the end of the string.
Output
For each test case, you have to tell whether the string is a legal number. If it is a legal number, output "YES" in a single line, otherwise, output "NO" in a single line.
Sample Input
5 0123 123.456 0.456E-5 123 456 0.456EF
Sample Output
YES YES YES NO NO
Author
Ignatius.L
Source
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <vector>
#include <set>
#include <map>
#include <climits>
using namespace std;
int main()
{
char ch[1000];
int t;
scanf("%d",&t);
getchar();
while(t--)
{
gets(ch);
int len=strlen(ch);
int flag=1,flag1=0,i;
for(i=0;i<len; i++)
{
if(ch[i]=='.')
{
if(i!=0) {flag1=1;i++;break;}
else flag=0;
}
if(ch[i]=='E')
{
if(i!=0) {flag1=2;i++;break;}
else flag=0;
}
if(ch[i]>='0'&&ch[i]<='9') continue;
else flag=0;
}
if(!flag)
{
printf("NO\n");continue;
}
if(flag1==1)
{
int flag2=0;
for(; i<len; i++)
{
if(ch[i]=='E')
{
if(flag2) {flag1=2;i++;break;}
else {flag=0;break;}
}
flag2++;
if(ch[i]>='0'&&ch[i]<='9') continue;
else flag=0;
}
if(!flag2) flag=0;
}
if(!flag) {printf("NO\n");continue;}
if(flag1==2)
{
int flag2=0,flag3=0;
for(; i<len; i++)
{
if(ch[i]=='-')
{
if(flag2) flag=0;
flag2=1;continue;
}
flag3++;
if(ch[i]>='0'&&ch[i]<='9') continue;
else flag=0;
}
if(!flag3) flag=0;
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}