UVA1590 IP网络(IP Networks)
2016-06-05 22:45
471 查看
第一次写的时候,把输入当成字符串处理,然后又转换成整数。看了别人的解答后,才知道可以scanf("%d.%d.%d.%d");
另外将整数转化成二进制,我用的是辗转相除法。最后得到的是正确结果。可是超时了。
换成位运算后快多了。
#include<stdio.h>
#include<string.h>
char s[1050][40];
int num[1050][5];
int sbin[1050][35];
int mask[35];
int main(){
//freopen("input.txt","r",stdin);
int a;
while(scanf("%d",&a)==1){
memset(s,0,sizeof(s));
memset(num,0,sizeof(num));
memset(sbin,0,sizeof(sbin));
for(int i=0;i<35;i++){mask[i]=1;}
for(int i=0;i<a;i++){
scanf("%d.%d.%d.%d",&num[i][0],&num[i][1],&num[i][2],&num[i][3]);//直接将整数提取出来!
for(int j=0;j<4;j++){
for(int t=7,k=0;k<8;k++,t--){
sbin[i][j*8+k]=(num[i][j]>>t)%2;//位运算大大地减小了时间!!!
}
}
}
int b=0,flag=1;
while(b<32){
for(int i=0;i<a;i++){
if(sbin[i][b]!=sbin[0][b]){
flag=0;break;
}
}
if(!flag) break;
b++;
}
for(int j=b;j<=31;j++){
sbin[0][j]=0;
mask[j]=0;
}
int t1=0,t2=0,t3=0,t4=0;//转换为十进制
int m1=0,m2=0,m3=0,m4=0;
for(int i=0;i<8;i++){
t1=t1*2+sbin[0][i];
t2=t2*2+sbin[0][i+8];
t3=t3*2+sbin[0][i+16];
t4=t4*2+sbin[0][i+24];
m1=m1*2+mask[i];
m2=m2*2+mask[i+8];
m3=m3*2+mask[i+16];
m4=m4*2+mask[i+24];
}
printf("%d.%d.%d.%d\n",t1,t2,t3,t4);
printf("%d.%d.%d.%d\n",m1,m2,m3,m4);
}
return 0;
}
另外将整数转化成二进制,我用的是辗转相除法。最后得到的是正确结果。可是超时了。
换成位运算后快多了。
#include<stdio.h>
#include<string.h>
char s[1050][40];
int num[1050][5];
int sbin[1050][35];
int mask[35];
int main(){
//freopen("input.txt","r",stdin);
int a;
while(scanf("%d",&a)==1){
memset(s,0,sizeof(s));
memset(num,0,sizeof(num));
memset(sbin,0,sizeof(sbin));
for(int i=0;i<35;i++){mask[i]=1;}
for(int i=0;i<a;i++){
scanf("%d.%d.%d.%d",&num[i][0],&num[i][1],&num[i][2],&num[i][3]);//直接将整数提取出来!
for(int j=0;j<4;j++){
for(int t=7,k=0;k<8;k++,t--){
sbin[i][j*8+k]=(num[i][j]>>t)%2;//位运算大大地减小了时间!!!
}
}
}
int b=0,flag=1;
while(b<32){
for(int i=0;i<a;i++){
if(sbin[i][b]!=sbin[0][b]){
flag=0;break;
}
}
if(!flag) break;
b++;
}
for(int j=b;j<=31;j++){
sbin[0][j]=0;
mask[j]=0;
}
int t1=0,t2=0,t3=0,t4=0;//转换为十进制
int m1=0,m2=0,m3=0,m4=0;
for(int i=0;i<8;i++){
t1=t1*2+sbin[0][i];
t2=t2*2+sbin[0][i+8];
t3=t3*2+sbin[0][i+16];
t4=t4*2+sbin[0][i+24];
m1=m1*2+mask[i];
m2=m2*2+mask[i+8];
m3=m3*2+mask[i+16];
m4=m4*2+mask[i+24];
}
printf("%d.%d.%d.%d\n",t1,t2,t3,t4);
printf("%d.%d.%d.%d\n",m1,m2,m3,m4);
}
return 0;
}
相关文章推荐
- 解决IdTCPClient和IdTCPServer通信中文乱码问题
- iOS开发网络篇—网络编程基础
- IO多路复用(select poll epoll)
- 5.3 误差反向传播
- 访问控制列表实验
- CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
- TimesTen 数据库复制学习:6. 利用STORE关键字设定复制网络传输的属性
- 神经网络算法的python实现
- TimesTen 数据库复制学习:5. 设定复制网络传输的return service
- 表单+servlet 网络调查表
- 【JavaWeb开发】用Apache的HttpClient4.5完成HttpPost请求
- android studio导入xutils编译时报错:找不到HttpRequestBase
- NAS 厂商的简单总结
- httpd之个人站点
- LINUX系统全部参数 sysctl -a + 网络参数设置
- HttpURLConnection的封装以及Callback的使用
- 浅谈多进程多线程的选择
- 网络编程总结TCP、UDP、URL编程
- 虚拟机网络详解
- 关于WebHDFS与HttpFS