洛谷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);
有问题,最终实际是输出了是这样的
原因是,你取数值的时候是通过 减去字符'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));
}
}
}