http://acm.hdu.edu.cn/showproblem.php?pid=1409
这是个狠水题,但是要考虑全面。
#include <iostream>
#include <string.h>
using namespace std;
#define N 105
char s[N];
int main(){
#ifndef ONLINE_JUDGE
freopen("Jin.txt","r",stdin);
#endif
int t,i,point,nume1,nume2;
bool flag;
scanf("%d",&t);
getchar();
while (t--){
flag=true;
gets(s);
point=nume1=nume2=0;
for (i=0;i<strlen(s);i++){
if ((s[i]<48||s[i]>57)&&s[i]!='.'&&s[i]!='E'&&s[i]!='-'){ //如果数字中出现其他字符,为NO。
flag=false;
break;
}
if (s[i]=='E'){
nume1++;
if (i+1==strlen(s)||i==0){ //如果'E'出现在第一个和最后一个,为NO
flag=false;
break;
}
}
else if (s[i]=='.'){
point++;
if (i+1==strlen(s)||i==0||nume1>0){ //如果'.'出现在第一个或者最后一个,或者出现在'E'之后,为NO
flag=false;
break;
}
}
else if (s[i]=='-'){
nume2++;
if (s[i-1]!='E'||i==0){ //如果'-'出现在第一个,或者'-'没有紧挨着在'E'之后,为NO
flag=false;
break;
}
}
if (nume1>1||nume2>1||point>1){ //如果'E','.','-'出现的次数多于一个,为NO
flag=false;
break;
}
}
if (flag)
printf("YES\n");
else printf("NO\n");
}
return 0;
}