Java8 洛谷P1955 ISBN号码

洛谷P1055 [NOIP2008 普及组] ISBN 号码
假如我输入0-670-82162-0
输出结果为0-670-82162-
想半天没想明白是为什么?
题目地址

import java.util.Scanner;
import java.util.Arrays;
public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String num = s.next();
        String num1 = num.replace("-","");
        int result = 0;
        int[] arr = new int[10];
       
        for(int i = 0;i//字符转数字
            arr[i] = num1.charAt(i) - '0';
        }

        for(int j = 0;j1;j++){
            result += arr[j] * (j+1);
        }
        if(result % 11 == arr[9]) {
            System.out.println("Right");
        }else {
            char[] cs = num.toCharArray();
            cs[12] = (char)(result % 11);
            System.out.println(new String(cs));
            

        }




    }


}

你的这行代码cs[12] = (char)(result % 11);有问题,最终实际是输出了是这样的

img

原因是,你取数值的时候是通过 减去字符'0'来实现的,但是转赋值的时候直接将4强转为char没有去加 '0'
改成这样就好了 cs[12] = (char)(result % 11 + '0');

参考GPT和自己的思路:

这个程序会读取一个ISBN号码,去掉其中的横杠,并且根据一个特定的算法计算出这个号码是否正确,如果不正确,则会将最后一位数字更正,以使整个号码正确。如果问题是为什么输出结果中没有最后一个横杠,可能是因为输入号码中最后一个横杠是多余的,而程序在去掉横杠时没有将其包含在内,因此最后输出的结果中就会没有这个横杠。这是一个小问题,不影响整个程序的正确性。

参考GPT和自己的思路:

根据题目要求,ISBN号码最后一位可能是数字(0~9)或者字符‘X’,所以在计算时需要进行特判。代码中只考虑了数字的情况,而没有特判字符‘X’,所以当计算结果为10时,应将结果转换成字符‘X’。另外,由于最后一位被替换成了计算结果,所以输出时需要保留原先最后一位的‘-’。

修改后的代码如下:

import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        String num = s.next();
        String num1 = num.replace("-", "");
        int result = 0;
        int[] arr = new int[10];

        for (int i = 0; i < num1.length(); i++) {
            // 字符转数字
            if (num1.charAt(i) == 'X') {
                arr[i] = 10;
            } else {
                arr[i] = num1.charAt(i) - '0';
            }
        }

        for (int j = 0; j < arr.length - 1; j++) {
            result += arr[j] * (j + 1);
        }
        if (result % 11 == arr[9]) {
            System.out.println("Right");
        } else {
            char[] cs = num.toCharArray();
            if (result % 11 == 10) {
                cs[12] = 'X';
            } else {
                cs[12] = (char) (result % 11 + '0');
            }
            System.out.println(new String(cs));
        }
    }
}