32.IP地址

该博客介绍了一个关于IP地址转换的问题,具体是将32位的二进制IP地址转化为点分十进制形式。博客中给出了输入和输出格式,并提供了转化思路,包括每8位转为一个十进制数,通过幂运算处理高位置的1,并在特定位置插入点号。
摘要由CSDN通过智能技术生成

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。icon-default.png?t=N7T8https://www.iai.sh.cn/problem/438

题目描述

IP地址是一个长度固定为 3232 位 的 01 序列,给定一个IP地址,请将它转成点分十进制后输出。

点分十进制的转化方法如下:首先将IP地址分割成长度相等的四个二进制数字(每个二进制数字的长度为 88),然后将这些数字用十进制表示,中间用 . 分割。

例如某个IP地址为:11000000101010000000000101100100,那么

  • 11000000 对应十进制数字为 192
  • 10101000 对应十进制数字为 168
  • 00000001 对应十进制数字为 1
  • 01100100 对应十进制数字为 100

这个IP地址的点分十进制表示为 192.168.1.100

输入格式

3232 个 01 字符:表示一个给定的IP地址

输出格式

一行字符:表示给定IP地址的点分十进制表示

>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>>>>>>>分割线>>>>>>>

思路

1.每8位转为一个十进制数,则可以使用8个长度的数组,每次只处理8个输入的字符

2.从最高位2^{7}2^{0},如果是1则加上对应的幂运算结果【看代码逻辑

3.注意点的输出,i=1,2,3时输出点【i<4

程序

#include<bits/stdc++.h>
using namespace std;
char a[10];
int e=0;
int main(){
	for(int i=1;i<=4;i++){
		cin>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8];
		if(a[1]=='1'){
			e+=128;
		}
		if(a[2]=='1'){
			e+=64;
		}
		if(a[3]=='1'){
			e+=32;
		}
		if(a[4]=='1'){
			e+=16;
		}
		if(a[5]=='1'){
			e+=8;
		}
		if(a[6]=='1'){
			e+=4;
		}
		if(a[7]=='1'){
			e+=2;
		}
		if(a[8]=='1'){
			e+=1;
		}
		if(i<4) cout<<e<<".";
		else cout<<e;
		e=0;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子龙烜

坦克大战系列,手把手带你实现

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值