hdu1409判断一个串是否是数字

    技术2025-07-08  10

    【题目链接】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");                }}            

    最新回复(0)