C++程序用于检查ISBN
给定序列,任务是识别给定序列是否为ISBN号码。
什么是ISBN号码?
ISBN代表国际标准书号,在2006年12月之前是10位数字,从2007年1月1日起改为13位数字。以下是10位ISBN的实现。
ISBN数字具有一定的模式:
- 前9位数字代表书籍的标题、出版商和组别。前9位数字的值范围为0-9。
- 最后一位数字用于检查ISBN是否正确。最后一位数字可以取值为10,并使用符号“X”表示该数字。
如何检查给定的10位数字是否为ISBN号码?
- 从序列的第一位数字开始,将其乘以10(因为ISBN是10位数字)。
- 继续移动到下一位数字,并将乘数减1。
- 将所有相乘的结果相加。
- 将结果除以11。
- 应用条件来检查ISBN号码。
- 如果结果可以被11整除,这意味着余数为0,则该数字为ISBN号码。
- 如果结果不能被11整除,这意味着余数不为0,则该数字不是ISBN号码。
示例
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
广告