整数字面值 cpp 1958

整数字面值
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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值