XTU 合法整数

Description

C语言中的10进制整数常量定义如下(不是严格的C定义,有简化):

1)        常量的开头可以有“+”或“-”号,也可以没有;

2)        至少有一位数字位,除非数字为0,否则第一个数字必须为19的数字;

3)        如果有符号的话,符号与数字之间可以有0个或多个空格。

4)        常量的前后可能会有若干空格。

请写一个程序判断给定的整数是否符合这个定义。

输入

       每个样例一行,每行表示一个整数,字符长度不超过20

输出

       每行输出一个样例的结果,如果符合定义输出“Yes”,否则输出“No

 

Sample Input

-123
5F
 

Sample Output

Yes
No
 

Source

ericxie
 

代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char string[30];
    while(gets(string))
    {
        int flag=0,l=0,k=0,sum,num=0,number=0,y=0,n=10000,h=0;
        l=strlen(string);
        for(int i=0;i<l;i++)
        {
            if(string[i]>='0'&&string[i]<='9')
            {num++;
            }
            if(k==0)
            {if(string[i]>='0'&&string[i]<='9')
            {
                k=1;
                y=1;
                sum=string[i];    
            }
            }
            if(string[i]=='+'||string[i]=='-')
            {
                number++;
            }
            if(sum=='0'&&num>1)//数字有0且后面还有数字
            {
                flag=1;
            }
            if(number>1)//符号大于1
            {
                flag=1;
            }
            if((string[i]<'0'&&string[i]!='+'&&string[i]!='-'&&string[i]!=' ')||string[i]>'9')//其他不符合的
            {flag=1;
            }
            if(k==1&&(string[i]=='-'||string[i]=='+'))//符号在数字后面的
            {
                flag=1;
            }
            if(h==0)
            {
            
            if(string[i]>='0'&&string[i]<='9'&&string[i+1]==' ')
            {y=0;
            n=num;
            h=1;
            }
        }
            if(string[i]>='0'&&string[i]<='9'&&n<num)
            {flag=1;
            }    
        }
        if(num==0)//没有数字的
        {flag=1;
        }
        if(flag==1)
        {printf("No\n");
        }else
        {printf("Yes\n");
        }    
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/kyx599/p/12121870.html