시퀀스와 함께 주어진 작업은 주어진 시퀀스가 ISBN 번호인지 여부를 식별하는 것입니다.
ISBN 번호란 무엇입니까
ISBN은 International Standard Book Number의 약자로 2006년 12월까지의 10자리 숫자이며 2007년 1월 1일부터 13자리 숫자로 수정되었습니다. 아래는 10자리 ISBN의 구현입니다.
ISBN 숫자에는 -
와 같은 패턴이 있습니다.- 숫자의 시작 9자리는 책의 제목, 출판사, 그룹을 나타냅니다. 처음 9자리 값의 범위는 0 - 9입니다.
- 마지막 1자리는 ISBN이 올바른지 여부를 확인합니다. 마지막 숫자는 값을 10으로 지정할 수 있으며 'X' 기호를 사용하여 이 숫자를 나타냅니다.
주어진 10자리 숫자가 ISBN 번호인지 여부를 확인하는 방법은 무엇입니까?
- 시퀀스의 첫 번째 숫자부터 시작하여 ISBN이 10자리 숫자이므로 10을 곱합니다.
- 승수 값을 1로 줄여 다음 숫자로 계속 이동
- 곱한 결과 모두 더하기
- 결과를 11로 나누기
- ISBN 번호 확인을 위한 조건 적용
- 결과가 11로 나눌 수 있는 경우 나머지가 남지 않거나 0이 숫자보다 나머지를 의미하는 경우 ISBN 번호입니다.
- 결과가 11로 나눌 수 없는 경우 숫자가 ISBN 번호가 아닌 나머지로 일부 나머지가 남거나 0이 아닌 경우
예
Input-: 002442142X Output-: Not ISBN Input-: 007462542X Output-: it’s ISBN
알고리즘
Start Step 1-> declare function to check for ISBN bool isvalid(string &isbn_number) set int n = isbn_number.length() IF (n != 10) return false End Set int sum = 0 Loop For int i = 0 and i < 9 and i++ Set int value = isbn_number[i] - '0' If (0 > value || 9 < value) return false End Set sum += (value * (10 - i)) End Set char last_val = isbn_number[9] IF (last_val != 'X' && (last_val < '0' || last_val > '9')) return false End Set sum += ((last_val == 'X') ? 10 : (last_val - '0')) return (sum % 11 == 0) step 2-> In main() set string isbn_number = "002442142X" IF (isvalid(isbn_number)) Print " is Valid" End Else Print " is invalid End Stop
예시
#include <bits/stdc++.h> using namespace std; //check whether its a valid ISBN or not bool isvalid(string &isbn_number) { int n = isbn_number.length(); if (n != 10) return false; int sum = 0; for (int i = 0; i < 9; i++) { int value = isbn_number[i] - '0'; if (0 > value || 9 < value) return false; sum += (value * (10 - i)); } char last_val = isbn_number[9]; if (last_val != 'X' && (last_val < '0' || last_val > '9')) return false; sum += ((last_val == 'X') ? 10 : (last_val - '0')); return (sum % 11 == 0); } int main() { string isbn_number = "002442142X"; if (isvalid(isbn_number)) cout<<isbn_number<<" is Valid"; else cout<<isbn_number<<" is invalid"; return 0; }
출력
위의 코드를 실행하면 다음 출력이 생성됩니다.
002442142X is invalid