192.168.100.16
YES
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; #define maxn 10000 + 6 char six[maxn]; char xp[maxn]; int liu[maxn]; int calcu(char s[]) { int len=strlen(s); int sum=0; for(int i=0;i<len;i++) { sum=sum*10+(s[i]-'0'); } return sum; } int main() { int i,j,k; int t,n,m; int a,b,c; while(gets(six)!=NULL) { int len=strlen(six); if(len<7||len>15) ///最小和最大长度 { printf("NO\n"); continue; } if(six[0]=='.'||six[len-1]=='.') ///判断头尾有无dot { printf("NO\n"); continue; } int flag=1; for(i=0;i<len;i++) ///判断有无空格 { if(six[i]==' ') { flag=0; break; } } if(flag==0) { printf("NO\n"); continue; } for(i=0;i<len;i++) ///判断是否有除dot外非数字的字符 { if((six[i]<'0'||six[i]>'9')&&six[i]!='.') { flag=0; break; } } if(flag==0) { printf("NO\n"); continue; } m=0; for(i=0;i<len;i++) ///找到dot个数 { if(six[i]=='.') m++; } if(m!=3) { printf("NO\n"); continue; } m=0; for(i=0;i<len;i++) ///找到dot位置 { if(six[i]=='.') liu[m++]=i; } /**if(liu[0]>3||len-1-liu[2]>3) { printf("NO\n"); continue; } if(liu[1]-liu[0]>4||liu[1]-liu[0]==1||liu[2]-liu[1]>4||liu[2]-liu[1]==1) { printf("NO\n"); continue; }*/ char l1[6]={},l2[6]={},l3[6]={},l4[6]={}; flag=0; for(i=0;i<liu[0];i++) { l1[flag++]=six[i]; } flag=0; for(i=liu[0]+1;i<liu[1];i++) { l2[flag++]=six[i]; } flag=0; for(i=liu[1]+1;i<liu[2];i++) { l3[flag++]=six[i]; } flag=0; for(i=liu[2]+1;i<len;i++) { l4[flag++]=six[i]; } ///printf("%s\n",six); ///printf("%d %d %d\n",liu[0],liu[1],liu[2]); ///printf("%s\n%s\n%s\n%s\n",l1,l2,l3,l4); flag=0; if(calcu(l1)>255||calcu(l2)>255||calcu(l3)>255||calcu(l4)>255) flag=1; if(flag) { printf("NO\n"); continue; } printf("YES\n"); } return 0; }
IP的计算------HDOJ杭电2206(写完脑洞大开,想象力要足够丰富)
原文地址:http://blog.csdn.net/u014231159/article/details/41653473