解题思路:感觉自己可能写的有点麻烦,我是先保存输入的字符串,用一个bool类型保存中途判断的结果,默认为false(为true的话有点坑,吃了不少亏)然后遍历这个字符串,首先截取不含小数点的部分,同时也记录一下小数点的个数,如果小数点的个数超过3就直接N。最后如果小于3也是N;接下来就是在遍历中截取字符串,注意substr()的用法,截取一个判断一个,(优化可能会在substr()这里优化,因为截取的同时就能顺便判断,不过我为了图思路简单)。用function函数再去一一判断


注意事项:不过测试点没有判断前导0的测试点,我第一遍竟然混过去了....

参考代码:

#include#includeusing namespace std;

bool func(string x)
{
	int sum = 0,wei = 1;
	bool ok = false;
	int lx = x.length();
	int i =0;
	for(i = lx-1;i>=0;i--)
	{
		//判断正负号 
		if(x[i] == '-')
		{
			ok = false;
			break;
		} 
		//判断前导0 
		if(x[0] == '0')
		{
			ok = false;
			break;
		}
		//判断数字的合法性 
		if(x[i]-'0'>=0&&x[i]-'0'255)
			{
				ok = false;
				break;
			}
			ok = true;
		}
		else
		{
			ok = false;
			break;
		}
	}
	return ok;
}

int main()
{
	int i;
	string s,s2;
	while(cin>>s)
	{
		bool ok = false;
		int ls = s.length();
		int num,f = 0,pos = 0;
		//截取不含小数点的字符串 
		for(i = 0;i3)
				{
					break;	
				} 
				s2 = s.substr(pos,i-pos);
				//判断字符串 
				if(func(s2))
				{
					ok = true;
				}
				else
				{
					ok = false; 	
					break;
				}
				pos = i+1;
			}
		}
		//最后一个字符串 
		if(f==3)
		{
			s2 = s.substr(pos,ls-1);
			if(func(s2))
			{
				ok = true;
			}
			else
			{
				ok = false; 
			}			
		 } 
		 else
		 {
		 	ok = false;
		 }
		 if(ok)
		 {
		 	cout<<"Y"<<endl;
		 }
		 else
		 {
		 	cout<<"N"<<endl;
		 }
					
	}
	return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论