核心思想
大模擬 -。-,還是不夠細心,面向樣例程式設計,一路錯過去的。
寫得太醜了 湊合看吧。
程式碼
import java.util.*;
public class Main {
public static void main(String[] args) {
final long MOD = (long) (1e9 + 7);
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String[] split = s.split("\\.");
boolean flag = true;
//開頭結尾必須是數字
if(s.charAt(0) < '0' || s.charAt(0) > '9' ||
s.charAt(s.length() - 1) < '0' || s.charAt(s.length() - 1) > '9')
flag = false;
//拆分後的陣列長度為4
if (split.length != 4)
flag = false;
if(!flag){
System.out.println("invalid");
return;
}
// 將ip轉換為數字
int[] nums = new int[4];
int idx = 0;
for (String sp : split) {
int cur = 0;
char[] chs = sp.toCharArray();
// 前導0 注意1.0.0.0 這樣是允許的 要結合size判斷 || 1.0..0 這樣的陣列長度也是4
if((sp.startsWith("0") && sp.length() !=1) || chs.length == 0){
flag = false;
break;
}
// 必須是數字
for (char ch : chs) {
if(ch < '0' || ch > '9'){
flag = false;
break;
}
else
cur = cur * 10 + ch - '0';
}
nums[idx++] = cur;
}
if(!flag){
System.out.println("invalid");
return;
}
if(!check(nums, 0, 255, 0, 255, 0, 255, 0, 255)){
System.out.println("invalid");
}
else if(check(nums, 1, 126, 0, 0, 0, 0, 0, 0)){
System.out.println("A_address");
}
else if(check(nums, 128, 191, 0, 255, 0, 255, 0, 255)){
System.out.println("B_address");
}
else if(check(nums, 192, 223, 0, 255, 0, 255, 0, 255)){
System.out.println("C_address");
}
else
System.out.println("other");
}
static boolean check(int[] nums,int s0, int e0, int s1, int e1, int s2, int e2, int s3, int e3){
// A類地址 第一位不是126時範圍變化一下 我傳入的start 和 end 都是0
if(nums[0] != 126){
e1 = e2 = e3 = 255;
}
if(nums[0] < s0 || nums[0] > e0)
return false;
if(nums[1] < s1 || nums[1] > e1)
return false;
if(nums[2] < s2 || nums[2] > e2)
return false;
if(nums[3] < s3 || nums[3] > e3)
return false;
return true;
}
}