4 条题解

  • 0
    @ 2025-4-1 9:26:23

    import java.util.Scanner;

    public class Main2 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
    
        //用字符串来收纳输入的编号
        String str = sc.next();
    
        //将字符串转化为数组
        char[] charArr = str.toCharArray();
    
    
        //再创建一个int类型的数组,来存储转化后的数字,index表示intArr的索引
        int[] intArr = new int[10];
        int index = 0;
        //0-670-82162-4这是数组存储的内容,如果最后一位是'X',这里便不会存入
        for (int i = 0; i < charArr.length; i++) {
            if (charArr[i] >= '0' && charArr[i] <= '9') {
                intArr[index] = charArr[i] - '0';
                index++;
            }
        }
    
        //计算最后一个识别码数字是否正确,sum是前面数字题目要求的和
        int sum = 0;
        for (int i = 0; i < intArr.length - 1; i++) {
            sum += intArr[i] * (1+i);
        }
    
        //算出最后一位数字是几
        int result = sum % 11;
    
    
        if (result == intArr[9]) {
            System.out.println("Right\n");
        } else if(result == 10) {
            //如果最后一位是'X',那就是正确的,直接输出Right
            if (charArr[charArr.length - 1] == 'X') {
                System.out.println("Right ");
            } else {
                //最后一位不是'X',要输出正确的内容
                char temp = 'X';
                charArr[charArr.length - 1] = temp;
                for (int i = 0; i < charArr.length; i++) {
                    System.out.print(charArr[i]);
                }
            }
        } else {
            //因为result是以int类型存储在电脑里的,若是直接(char)(result) 会打出乱码,因为可以显示的ASCII表中的东西一般是32到100,所以前面+ '0'
            char temp = (char)('0' + result);
            charArr[charArr.length - 1] = temp;
            for (int i = 0; i < charArr.length; i++) {
                System.out.print(charArr[i]);
            }
        }
    }
    

    }

    信息

    ID
    5113
    时间
    1000ms
    内存
    128MiB
    难度
    2
    标签
    递交数
    451
    已通过
    163
    上传者