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 无效

相关文章