Hydra


私信TA

用户名:uq_87402456886

访问量:1343

签 名:

等  级
排  名 17963
经  验 758
参赛次数 0
文章发表 6
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

等差数列(c++)
浏览:570

解题思路:感觉自己可能写的有点麻烦,我是先保存输入的字符串,用一个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 人评分

  评论区

  • «
  • »