当前位置: 代码迷 >> 综合 >> P1055 [NOIP2008 普及组] ISBN 号码 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字、11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx
  详细解决方案

P1055 [NOIP2008 普及组] ISBN 号码 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字、11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx

热度:95   发布时间:2023-12-11 21:38:08.0

文章目录

  • P1055 [NOIP2008 普及组] 题解
    • Java 代码
    • 关键分析

P1055 [NOIP2008 普及组] 题解

题目链接

Java 代码

package luoguTest;import java.util.Scanner;public class P1055 {
    public static void main(String args[]) {
    // x-xxx-xxxxx-xScanner sc = new Scanner(System.in);String str = sc.nextLine() ;int sum = 0 ;int j =1 ;char c ;for(int i = 0 ; i <= 10 ; i++) {
        // - 的阻碍if(str.charAt(i) == '-') {
    continue ; }sum +=  (str.charAt(i) - '0' ) * j++ ;   //处理}if(sum%11 < 10) {
    // 字符串 字符 因为后续需要拼接c = (char) (sum%11+'0') ;   // 数字 + 48 再转换} else {
    c = 'X' ;}if(str.charAt(12) == c) {
       // 注意 - 也是字符串一员System.out.println("Right");} else {
    String res = str.substring(0,12) + c ; System.out.println(res);}}}

关键分析

  • For 循环(选择性)
			for(int i = 0 ; i <= 10 ; i++) {
        // - 的阻碍if(str.charAt(i) == '-') {
    continue ; }sum +=  (str.charAt(i) - '0' ) * j++ ;   //处理}
  • 旧解 不使用循环
sum=(s.charAt(0)-'0')*1+(s.charAt(2)-'0')*2+(s.charAt(3)-'0')*3+(s.charAt(4)-'0')*4+(s.charAt(6)-'0')*5+(s.charAt(7)-'0')*6+(s.charAt(8)-'0')*7+(s.charAt(9)-'0')*8+(s.charAt(10)-'0')*9;
  • 另设变量 j 解决 (i + 1) 连锁问题
sum +=  (str.charAt(i) - '0' ) * (i+1) ;sum +=  (str.charAt(i) - '0' ) * j++ ;
  相关解决方案