终于!让我缓和了下,前阵子做题有点小崩溃,思路跟不上。今天这个就让我舒服一点。
解析:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}存入数组 遍历字符串相乘=sum sum+=sum z=sum%11
m存入数组 索引z取值 比较字符串最后一位
public class Pta_1031 {
static int[] qz = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//权重
static char[] m_index = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};//校验码
public static void main(String[] args) throws IOException {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
int time = Integer.parseInt(buf.readLine());
int num = 0;
for (int i = 0; i < time; i++) {
String str = buf.readLine();
if (test2(str)) {
num++;
System.out.println(str);
}
}
if (num == 0) {
System.out.println("All passed");
}
}
public static boolean test2(String str) {
int sum = 0;
int z = 0;
for (int i = 0; i < str.length() - 1; i++) {
//判断前17位是否包含非法字符,如果有,直接返回真,后面不执行,因为有非法字符无法计算。
if ('0' > str.charAt(i) || str.charAt(i) > '9') {
return true;
}
//得到数字,进行权重相乘,存到sum
int res = str.charAt(i) - 48;
sum += res * qz[i];
}
//取模得到z,根据z作为索引得到校验码
z = sum % 11;
if (m_index[z] != str.charAt(str.length() - 1)) {
return true;
}
return false;
}
}