![]() |
#2
Xiao59305012012-11-01 00:46
|
合法的整数
Description
C语言中的10进制整数常量定义如下(不是严格的C定义,有简化):
1) 常量的开头可以有“+”或“-”号,也可以没有;
2) 至少有一位数字位,除非数字为0,否则第一个数字必须为1到9的数字;
3) 如果有符号的话,符号与数字之间可以有0个或多个空格。
4) 常量的前后可能会有若干空格。
请写一个程序判断给定的整数是否符合这个定义。
输入
每个样例一行,每行表示一个整数,字符长度不超过20;
输出
每行输出一个样例的结果,如果符合定义输出“Yes”,否则输出“No”
Sample Input
-123
5F
Sample Output
Yes
No
这是我的代码:

#include <iostream>
using namespace std;
int main()
{
int i,cond,count;
bool shi;
char sa[21];
while(gets(sa))
{
cond = 0; //分几种情况
count = 0;
shi = 1; //是合法整数为1,不是为0
for (i=0;i<strlen(sa);++i)
{
if (sa[i] == '+' || sa[i] == '-')
{
if (cond == 0)
cond = 1; //以'+'和'-'开头的
else
{
shi = 0;
break;
}
}
else if (sa[i] == '0' && (cond == 0 || cond == 1))
{
count++;
if (cond == 0)
cond = 2; //以'0'开头的
else
cond = 3; //以上两者开头的
}
else
{
if (sa[i] > '0' && sa[i] <= '9')
count++; //计算数字个数
if ((sa[i] > '0' && sa[i] <= '9' || sa[i] == ' ') && (cond == 2 || cond == 3)) //第一个0后面有数字
{
shi = 0;
break;
}
if ((sa[i] <'0' || sa[i] >'9') && sa[i] != ' ') //非0-9和空格
{
shi = 0;
break;
}
}
}
if (shi == 1 && count != 0)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}
这是程序结果:http://pan.baidu.com/share/link?shareid=111491&uk=1024075439
还有哪里不对,提交是wrong answer,是还有情况没考虑到么?
