整数字面值
Time Limit:1000MS Memory Limit:32768K
Description:
整数字面值仅指int和long long型有符号整数。其为非0数字开头的数字序列,数字序列之前可有一个±符号。例如:0125就错了,++15也错了,1.0根本不是整数,+dog错到十万八千里了,0当然是整数啰。
整数字面值还有位数限制,int不得超过10位。long long不得超过19位,且整数后跟一个L或者l以示与int的区别。例如:-1234567890是整数字面值,12345678903不是整数字面值,因其超长,尾部又没跟L,而-1234567890123L也是整数字面值。请判断是否整数字面值。注意,本题仅要求位数合法,例如9999999999没超10位,是整数字面值。
Input:
一些字串。
Output:
对于每个字串,若为整数字面值,则输出“Yes”,否则输出“No”,占一行。
Sample Input:
0125 ++15 1.0 +doge 0
-1234567890 12345678903 -1234567890123L
10100101110010001011123456789
Sample Output:
No
No
No
No
Yes
Yes
No
Yes
No
#include<iostream>
#include<algorithm>
using namespace std;
/*
0125 ++15 1.0 +doge 0
-1234567890 12345678903 -1234567890123L
10100101110010001011123456789
*/
int main()
{
char str[100000];
while (cin >> str)
{
if (str[0] == '0'&&strlen(str)>1)
{
cout << "No" << endl;
continue;
}
//长度
if (strlen(str) > 19)
{
cout << "No" << endl;
continue;
}
if (strlen(str) <= 19 && strlen(str) > 10)
{
if (str[strlen(str) - 1] != 'L')
{
if ((str[0] == '+' || str[0] == '-')&&strlen(str)==11);
else
{
cout << "No" << endl;
continue;
}
}
}
int i;
for (i = 0; str[i] != '\0'; i++)//check
{
if (!(str[i] <= '9' && str[i] >= '0'))
{
if (i == 0 && (str[i] == '+' || str[i] == '-'))continue;
if (i == strlen(str) - 1 && str[i] == 'L')continue;
else break;
}
}
if (i != strlen(str))cout << "No" << endl;
else cout << "Yes" << endl;
}
}