C++ 程序检查 ISBN
c++server side programmingprogramming更新于 2024/10/10 17:59:00
给定序列,任务是确定给定序列是否是 ISBN 号。
什么是 ISBN 号
ISBN 代表国际标准书号,截至 2006 年 12 月为 10 位数字,现在从 2007 年 1 月 1 日起修订为 13 位数字。下面给出了 10 位 ISBN 的实现。
ISBN 数字具有 − 的模式
- 数字的前 9 位代表书名、出版商和图书组。前 9 位数字的值范围为 0 - 9
- 最后 1 位检查 ISBN 是否正确。最后一位数字可以取值为 10,符号为"X"用于表示此数字
如何检查给定的 10 位数字是否为 ISBN 号?
- 从序列的第一位开始,将其乘以 10,因为 ISBN 是 10 位数字
- 通过将乘数值减 1 继续移动到下一位数字
- 将所有乘积结果相加
- 将结果除以 11
- 应用条件检查 ISBN 号
- 如果结果可以被 11 整除,即没有余数或余数为 0,则该数字为 ISBN 号
- 如果结果不能被 11 整除,即有余数或余数不为 0,则该数字不是 ISBN 号number
示例
输入-: 002442142X 输出-: 非 ISBN 输入-: 007462542X 输出-: 是 ISBN
算法
开始 步骤 1-> 声明函数检查 ISBN bool isvalid(string &isbn_number) set int n = isbn_number.length() IF (n != 10) 返回 false 结束 设置 int sum = 0 循环 For int i = 0 and i < 9 and i++ 设置 int value = isbn_number[i] - '0' 如果 (0 > value || 9 < value) 返回 false 结束 设置 sum += (value * (10 - i)) 结束 设置 char last_val = isbn_number[9] 如果 (last_val != 'X' && (last_val < '0' || last_val > '9')) 返回 false 结束 设置 sum += ((last_val == 'X') ? 10 : (last_val - '0')) 返回 (sum % 11 == 0) 步骤 2->在 main() 中 设置字符串 isbn_number = "002442142X" 如果 (isvalid(isbn_number)) 打印 " 有效" 结束 否则 打印 " 无效 结束 停止
示例
#include <bits/stdc++.h> using namespace std; //检查其是否为有效 ISBN 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<<" 有效"; else cout<<isbn_number<<" 无效"; return 0; }
输出
如果我们运行上述代码,它将生成以下输出
002442142X 无效