洛谷P1055 ISBN 号码

题目描述
每一本正式出版的图书都有一个ISBN 号码与之对应,ISBN 码包括9位数字、1位识别码和3位分隔符其规定格式如 x-xxx-xxxxx-x ,其中符号 就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4 就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如0代表英语:第个分隔符 之后的三位数字代表出版社,例如 670 代表维京出版社,第二个分隔符后的五位数字代表该书在该出版社的编号:最后一位为识别码。
识别码的计算方法如下
首位数字乘以1加上次位数字乘以 2 …..以此类推,用所得的结果 mod11,所得的余数即为识别码,如果余数为 10,则识别码为大写字母 X。例如 ISBN 号码 -670-82162-4 中的识别码 4 是这样得到的: 对067082162 这9个数字,从左至右,分别乘以1,2,…,9再求和,即0 x 1+6x 2+……+2 x9 = 158,然后取 158 mod 11 的结果4作为识别码。
你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出 ight ;如果错误则输出你认为是正确的 ISBN 号码
输入格式
个字符序列,表示一本书的 ISBN 号码 (保证输入符合ISBN 号码的格式要求)。
输出格式
行,假如输入的ISBN 号码的识别码正确,那么输出 Right ,否则,按照规定的格式,输出正确的ISBN号码 (包括分隔符 )。
输入输出格式

0-670-82162-4
输出样式
Right

分析

首先呢,他的主要要求就是将前面的9个数字分别a1*1+a2*2-----+a9*9的和mod11就是(取余)等于最后一位数字就输出Right,如果取余等于10的话就用X代表,如果你的总和mod11不等于最后一位数字就要把他修正,思路,分成2个系统,先判断他最后以为是不是X,如果是的话,就要注意,X=10;也就是说,总和mod11等于10,最后一位是X的话,那么他就是正确的,则返回Right,如果不对,则要把他修正,修正的10要用X替代

代码

我感觉有点造轮子了,不过过了哈哈哈,新手勿喷哈哈


import java.util.Scanner;
import java.util.logging.XMLFormatter;

public class ISBN号码 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String st = in.next();
        int[] arr = new int[10];
        int k = 0;
        for (int i = 0; i <= 12; i++) {
            if (i == 1 || i == 5 || i == 11) {

            } else {
                char c = st.charAt(i);
                int a = Character.getNumericValue(c);
                arr[k] = a;
                k++;
            }
        }
        int value = 0;
        for (int i = 0; i < 9; i++) {
            value += arr[i] * (i + 1);
        }
        char c1 = st.charAt(12);
        String aaa = ""+c1;
        int ik = Character.getNumericValue(c1);
        int x1 = value % 11;
        if (aaa.equals("X")){
            if (x1==10){
                System.out.println("Right");
            }else {
                int aa1 = 0;
                for (int i = 0; i < 12; i++) {
                    if (i == 11) {
                        if (x1==10) {
                            System.out.print("-X");
                        }else {
                            System.out.print("-" + value % 11);
                        }
                    } else {
                        if (i == 1 || i == 5) {
                            System.out.print("-");
                        } else {
                            System.out.print(arr[aa1]);
                            aa1++;
                        }
                    }
                }
            }
        }else {
            if (value % 11 == arr[arr.length - 1]) {
                System.out.println("Right");
            } else {
                int aa = 0;
                for (int i = 0; i < 12; i++) {
                    if (i == 11) {
                        if (value%11==10) {
                            System.out.print("-X");
                        }else {
                            System.out.print("-" + value % 11);
                        }
                    } else {
                        if (i == 1 || i == 5) {
                            System.out.print("-");
                        } else {
                            System.out.print(arr[aa]);
                            aa++;
                        }
                    }
                }
            }
        }

    }
}
消息盒子
# 您需要首次评论以获取消息 #
# 您需要首次评论以获取消息 #

只显示最新10条未读和已读信息