题目
整数与IP地址间的转换_牛客题霸_牛客网 (nowcoder.com)
C语言
#include <stdio.h>
void fun_2024_6_18(void) {
unsigned int b, d[4];
while (scanf("%d.%d.%d.%d", &d[0], &d[1], &d[2], &d[3]) != EOF) {
scanf("%u", &b);
//点分转十进制
unsigned int tmp=0;
for (int _ = 0; _ < 4; _++) {
tmp += (d[_] << ((3 - _) * 8));
}
printf("%u\n", tmp);
//十进制转点分
for (int _ = 0; _ < 4; _++) {
d[_] = b >> ((3 - _) * 8);
//&&0xff是为了只取8位
d[_]&=0xff;
}
printf("%d.%d.%d.%d", d[0], d[1], d[2], d[3]);
}
}
int main() {
fun_2024_6_18();
return 0;
}
C++
#include<iostream>
#include<string>
using namespace std;
void fun_2024_6_18()
{
unsigned int a,b,c,d;
char ch; // '.'
while(cin>>a>>ch>>b>>ch>>c>>ch>>d)
{
cout<<((a<<24)+(b<<16)+(c<<8)+d)<<endl;
cin>>a;
cout<<((a&0xff000000)>>24)<<"."<<((a&0x00ff0000)>>16)<<"."<<((a&0x0000ff00)>>8)<<"."<<(a&0x000000ff)<<endl;
}
}
int main()
{
fun_2024_6_18();
return 0;
}
Python
def fun_2024_6_18(s):
ans=0
if '.' in s:
num=list(map(int,s.split('.')))
for _ in range(4):
ans+=(num[_]<<(8*(3-_)))
else:
b=bin(int(s)) # 0b11111
b=b[2:] # 11111
b=b.rjust(32,'0') # 对齐,避免长度不足32位
ans=f"{int(b[0:8],2)}.{int(b[8:16],2)}.{int(b[16:24],2)}.{int(b[24:],2)}"
print(ans)
while True:
try:
s=input()
fun_2024_6_18(s)
except:
break