求助,判断合法的整数,还有哪里不对?
题目:http://202.197.224.59/exam/index.php/problem/read/id/1060合法的整数
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,是还有情况没考虑到么?