您的位置:首页 > 其它

hdoj 2206 IP的计算

2014-06-02 16:25 429 查看
Problem Description
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。

但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。



Input
输入有多个case,每个case有一行,不超过100个字符。


Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。


Sample Input
192.168.100.16




Sample Output
YES



#include<stdio.h>
#include<string.h>
int main()
{
	char s[105];
	int i, j, l, flag;
	while( gets(s) )
	{
	//	printf( "%c..", s[0] );
		flag = 0;//判断是不是点或数字
		int temp = 0, flag1 = 0;//flag1是统计‘.’的个数
		l = strlen(s);
		if( l > 15||s[0]<'0'||s[0]>'9' )
		{
			printf( "NO\n" );
			continue;
		}
		for( i = 0; i < l; i ++ )
		{
			if( s[i] >= '0'&&s[i]<='9' )
			{
				temp = temp*10+s[i]-'0';
			}
			else if( s[i] == '.'&&s[i+1] >='0'&&s[i+1] <= '9' )
			{
				if( temp > 255 )
				{
					flag = 1;
					break;
				}
				else
				{
					temp = 0;
					flag1 ++;
				}
			}
			else
			{
				flag = 1;
				break;
			}
		}
		if( temp > 255 )
			flag1 ++;
			//printf( "f1=%d..f=%d...", flag1, flag );第一次忘删了<img alt="尴尬" src="http://static.blog.csdn.net/xheditor/xheditor_emot/default/awkward.gif" />
			if( flag )
			{
				printf( "NO\n" );
			}
			else if( flag1 != 3 )
			printf( "NO\n" );
			else
			printf( "YES\n" );
	}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: