- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
java解法
- 解题思路
- 这段 Java 代码的目标是将一个以 # 分隔的自定义格式 IP 地址(例如 10#200#30#40)转换为一个整数。如果输入的 IP 地址格式或内容不合法,返回 “invalid IP”。具体步骤如下:
分割字符串:使用 # 作为分隔符,将输入字符串分割成 4 段。
验证分段长度:确保分割后正好有 4 段。
解析和验证每段:
将每段解析为整数。
验证每段是否在指定的范围内:
第一段范围是 [1, 128]。
其他段范围是 [0, 255]。
计算结果:
使用位操作将 4 段的整数值转换为一个 32 位的无符号整数。
通过位移和按位或(|)操作将每段拼接到结果中:
第一段左移 24 位,第二段左移 16 位,第三段左移 8 位,第四段保持不变。
返回结果:如果所有验证通过,返回计算结果;否则返回 “invalid IP”。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String ipAddress = scanner.nextLine();
System.out.println(convertToInteger(ipAddress));
}
public static String convertToInteger(String address) {
String[] parts = address.split("#");
if (parts.length != 4) return "invalid IP";
try {
int part1 = Integer.parseInt(parts[0]);
int part2 = Integer.parseInt(parts[1]);
int part3 = Integer.parseInt(parts[2]);
int part4 = Integer.parseInt(parts[3]);
if (part1 < 1 || part1 > 128 ||
part2 < 0 || part2 > 255 ||
part3 < 0 || part3 > 255 ||
part4 < 0 || part4 > 255) {
return "invalid IP";
}
long result = (long) part1 << 24 |
(long) part2 << 16 |
(long) part3 << 8 |
part4;
return String.valueOf(result);
} catch (NumberFormatException e) {
return "invalid IP";
}
}
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
C++解法
- 解题思路
- 这段代码的目标是将一个自定义格式的 IP 地址(例如 10#200#30#40)转换为一个整数。输入的 IP 地址需要满足以下条件:
必须由 # 分割成 4 个部分。
第一部分的数值范围为 [1, 128]。
其余三部分的数值范围为 [0, 255]。
如果输入不符合上述条件,程序返回 “invalid IP”;如果符合条件,将其转换为一个 32 位整数(无符号表示),并输出结果。
#include
#include
#include
#include
using namespace std;
string convertToInteger(const string& address) {
stringstream ss(address);
string segment;
vector<int> parts;
while (getline(ss, segment, '#')) {
try {
parts.push_back(stoi(segment));
} catch (exception& e) {
return "invalid IP";
}
}
if (parts.size() != 4) {
return "invalid IP";
}
for (int i = 0; i < 4; ++i) {
if (i == 0 && (parts[i] < 1 || parts[i] > 128)) {
return "invalid IP";
}
if (i > 0 && (parts[i] < 0 || parts[i] > 255)) {
return "invalid IP";
}
}
long long result = static_cast<long long>(parts[0]) << 24 |
static_cast<long long>(parts[1]) << 16 |
static_cast<long long>(parts[2]) << 8 |
parts[3];
return to_string(result);
}
int main() {
string ipAddress;
getline(cin, ipAddress);
cout << convertToInteger(ipAddress) << endl;
return 0;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
分割字符串:使用 # 分隔输入字符串,得到 4 个片段。
验证分段数量:确保分割后的数组长度为 4。
验证每段的合法性:
每段必须是数字。
第一段范围为 [1, 128]。
其他段范围为 [0, 255]。
计算整数结果:
使用位操作将每段值拼接为一个 32 位整数:
第一段左移 24 位,第二段左移 16 位,第三段左移 8 位,第四段保持不变。
返回结果:
如果验证失败,返回 “invalid IP”。
如果验证通过,返回计算的整数。
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
rl.on("line", (input) => {
console.log(convertToInteger(input));
});
function convertToInteger(ipStr) {
const segments = ipStr.split("#");
if (segments.length !== 4) {
return "invalid IP";
}
if (
!segments.every((seg, index) =>
validateSegment(seg, index === 0 ? 1 : 0, 255)
)
) {
return "invalid IP";
}
let result = 0;
for (let i = 0; i < 4; i++) {
result |= parseInt(segments[i]) << ((3 - i) * 8);
}
return result;
}
function validateSegment(segment, min, max) {
const num = Number(segment);
return (
!isNaN(num) &&
String(num) === segment &&
num >= min &&
num <= max &&
Number.isInteger(num)
);
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。
解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: