IP的计算
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 117 Accepted Submission(s) : 14
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。
Input
输入有多个case,每个case有一行,不超过100个字符。
Output
对于每个case,判断输入的IP是否正确,如果正确输入YES,否则NO。
Sample Input
192.168.100.16
Sample Output
YES
解题思路
做这道题真是享受啊!享受那种总有你想不到的感觉!我对这题如初恋,可惜他总是虐我千百遍。这道题不难,只不过需要考虑的情况有很多,如果把所有情况都考虑到则这题ac.
情况:
1、因为ip地址最多有四个三位数和三个点组成,所以输入的字符串的长度不会超过15;
2、输入的字符串中 ' . ' 的个数必须为3;
3、每两个点之间可以为0,但是不能为空;
4、除了点之外其他的字符必须在'0'--'9'之内;
5、每个三位数必须在0--255之间;
如果满足这五个情况,这样的ip地址才正确。
还有一种情况,学长说01.0.0.0这个ip地址也不对,因为若第一个其值不为0,但是以0开头,所以也不符合ip地址的要求,我这个代码没考虑这种情况但是也ac了,本着实事求是的原则,我特意做了实际操作。当对电脑输入01.0.0.0的时候,电脑没有报错,但是再次打开的时候变成了0.0.0.0,这应该是电脑系统自动的数据修改吧。
代码
#include<stdio.h> #include<string.h> char s[110]; int c[7],d[5]; int main() { int len; int i,j,k,l,m; while(gets(s)!=NULL) { len=strlen(s); if(len>15) printf("NO\n"); else { j=1; c[0]=-1; for(i=0;i<len;i++) if(s[i]=='.') { c[j]=i; j++; } c[j]=len; if(j!=4) printf("NO\n"); else { l=0; for(i=0;i<4;i++) if(c[i+1]-c[i]==1) l=1; if(l==1) printf("NO\n"); else { memset(d,0,sizeof(d)); l=0; for(j=0;j<4;j++) for(i=c[j]+1;i<c[j+1];i++) { m=s[i]-'0'; if(m<0||m>9) l=1; d[j]=d[j]*10+s[i]-'0'; } if(l==1) printf("NO\n"); else { l=0; for(i=0;i<4;i++) if(d[i]<0||d[i]>255) l=1; if(l==1) printf("NO\n"); else printf("YES\n"); } } } } } return 0; }