【算法】程序猿不写代码是不对的53

来源:互联网 发布:mysql存储过程 编辑:程序博客网 时间:2024/06/02 02:50
package com.kingdz.algorithm.time201705;/** * 校验ISBN号 *  * <pre> * ISBN号形如:7-118-01984-4 * 7代表中国,118代表国防工业出版社,01984代表书名号,最后一位表示校验码 * 校验码的计算规则是用10到2这九个数分别顺序乘以ISBN的前九位数,所得乘积之和与11取模,其余数于11的差即是校验位的数值。 * 所以校验位的数值是0到10的任意一个数,其中10用X来表示 * </pre> *  * @author kingdz *  */public class Algo11 {public static void main(String[] args) {String isbn = "7-118-01984-4";String okIsbn = checkISBN(isbn);System.out.println("origin isbn[" + isbn + "]");if (isbn.equals(okIsbn)) {System.out.println("RIGHT");} else {System.out.println(okIsbn);}}private static String checkISBN(String isbn) {String newisbn = isbn.replace("-", "");if (newisbn.length() != 10 || !newisbn.substring(0, 9).matches("^\\d+$")) {return null;}int sum = 0;int num = 10;for (int i = 0; i < newisbn.length(); i++) {sum = sum + num * Integer.parseInt("" + newisbn.charAt(i));num--;if (num == 1) {break;}}sum = sum % 11;sum = Math.abs(11 - sum);String c = "X";if (sum < 10) {c = "" + sum;}if (isbn.endsWith("" + c)) {return isbn;} else {String ret = isbn.substring(0, isbn.length() - 1) + c;return ret;}}}

0 0