【题目链接】http://acm.hdu.edu.cn/showproblem.php?pid=1409
【题目大意】
给定一个串,判断其是否是一个数,会有小数点出现,E出现,或者空格出现等;
【分析】
数的特征:数据由小数和整数部分组成 小数部分可以是.11 也可以是 . 就是小数点后没有数据。 整数也是一样的,可以是2 也可以是 空 若要用指数表示,则E的前面必须有合法的整数或者小数E后面必须是整数,开头可以有+-号 几组正确的的数据111 0123 123.456 0.456E-5 .1 1. 1.E2 .1E2几组不合法的E E2 2E 2E0.2 2E.2 1.. ..1
【代码】
/*2011-02-14 09:50:37 Accepted 1409 0MS 232K 1092 B C++ */
#include<stdio.h>#include<ctype.h>int Isnum(char *a){ int tmp,i; for(i=0;a[i]&&isdigit(a[i]);i++); if(!a[i]) return 1; else if(a[i]=='.'){ i++; for(;a[i]&&isdigit(a[i]);i++); if(!a[i]) return 1; else if(a[i]=='E'){ i++; if(a[i]=='+'||a[i]=='-') i++; tmp=i; for(;a[i]&&isdigit(a[i]);i++); if(i==tmp) return 0; if(!a[i]) return 1; else return 0; } else return 0; } else if(a[i]=='E'){ if(i==0) return 0; i++; if(a[i]=='+'||a[i]=='-') i++; tmp=i; for(;a[i]&&isdigit(a[i]);i++); if(i==tmp) return 0; if(!a[i]) return 1; else return 0; } else return 0;}int main(){ int T; char a[105]; scanf("%d",&T); getchar(); while(T--) { gets(a); if(Isnum(a)==1) puts("YES"); else puts("NO"); }}