BC76. [NOIP2008]ISBN号码
描述
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。输入描述
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。输出描述
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。示例1
输入:
0-670-82162-4
输出:
Right
示例2
输入:
0-670-82162-0
输出:
0-670-82162-4
C 解法, 执行用时: 2ms, 内存消耗: 284KB, 提交时间: 2022-05-29
#include <stdio.h> int main() { char a[13]; int b,c=0,d=1,m; scanf("%s",a); for(b=0;b<=10;b++) { if (a[b]!='-'){ c+=((a[b]-'0')*d); d++; } } m=c%11; if (m==10 && a[12]=='X') printf("Right"); else if (m==a[12]-'0') { printf("Right"); } else { a[12]=m+'0'; if (a[12]==':') a[12]='X'; printf("%s",a); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-03-14
#include <stdio.h> int main() { char arr[14] = { 0 }; scanf("%s", &arr); int sum = 0; int i = 0; int j = 1; for (i = 0; i < 11; i++) { if (arr[i] == '-') continue; else { sum += (arr[i] - '0') * j; j++; } } sum %= 11; if (sum == 10) sum = 'X' - '0'; if (arr[12] == sum + '0') printf("Right\n"); else { arr[12] = sum + '0'; printf("%s", arr); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-06-14
#include<stdio.h> int main() { char str[13]={0}; scanf("%s",str); int sum=0; int j=1; for(int i=0;i<11;++i) { if(str[i]!='-') { sum+=(str[i]-'0')*j; ++j; } } int mod=sum%11;//最后一位的识别码 if(mod== str[12]-'0'||(mod==10&&str[12]=='X')) { printf("Right\n"); } else { if(mod==10) { for(int i=0;i<12;++i) { printf("%c",str[i]); } printf("X"); } else { for(int i=0;i<12;++i) { printf("%c",str[i]); } printf("%d",mod); } } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-03-15
#include <stdio.h> int main() { char arr[13]; int n = 1, sum = 0, ret; scanf("%s", &arr); for (int i = 0; i < 12; i++) { if (arr[i] != '-') { sum += (arr[i] - '0') * n; n++; } } ret = sum % 11; if ((ret + '0') == arr[12]|| ret +78 == arr[12]) printf("Right"); else { switch (ret) { case 0: arr[12] = '0'; break; case 10: arr[12] = 'X'; break; default: arr[12] = ret + '0'; break; } printf("%s", arr); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 300KB, 提交时间: 2022-07-26
#include<stdio.h> int main(){ int a,b,c,d,e,f,g,h,i,J_r,bcd,efghi; char J; scanf("%d-%d-%d-%c",&a,&bcd,&efghi,&J); d = bcd%10; c = (bcd%100-d)/10; b = (bcd%1000-c*10-d)/100; i = efghi%10; h = (efghi%100-i)/10; g = (efghi%1000-h*10-i)/100; f = (efghi%10000-g*100-h*10-i)/1000; e = (efghi%100000-f*1000-g*100-h*10-i)/10000; J_r = (a+b*2+c*3+d*4+e*5+f*6+g*7+h*8+i*9)%11; if (J_r == 10) { if (J == 'X') printf("Right\n"); else printf("%d-%d%d%d-%d%d%d%d%d-X\n",a,b,c,d,e,f,g,h,i); } else { if ((int) (J-'0') == J_r) printf("Right\n"); else printf("%d-%d%d%d-%d%d%d%d%d-%d\n",a,b,c,d,e,f,g,h,i,J_r); } // printf("%d\n",J); // printf("%d\n",(int)'X'); }