首页 > 编程语言 >C++ [NOIP2008 普及组] ISBN 号码

C++ [NOIP2008 普及组] ISBN 号码

时间:2024-03-23 20:00:54浏览次数:42  
标签:670 ISBN 号码 int 识别码 NOIP2008 C++ 样例

文章目录


一、题目描述

[NOIP2008 普及组] ISBN 号码

题目描述

每一本正式出版的图书都有一个 ISBN 号码与之对应,ISBN 码包括 9 9 9 位数字、 1 1 1 位识别码和 3 3 3 位分隔符,其规定格式如 x-xxx-xxxxx-x,其中符号 - 就是分隔符(键盘上的减号),最后一位是识别码,例如 0-670-82162-4就是一个标准的 ISBN 码。ISBN 码的首位数字表示书籍的出版语言,例如 0 0 0 代表英语;第一个分隔符 - 之后的三位数字代表出版社,例如 670 670 670 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

首位数字乘以 1 1 1 加上次位数字乘以 2 2 2 ……以此类推,用所得的结果 $ \bmod 11$,所得的余数即为识别码,如果余数为 10 10 10,则识别码为大写字母 X X X。例如 ISBN 号码 0-670-82162-4 中的识别码 4 4 4 是这样得到的:对 067082162 这 9 9 9 个数字,从左至右,分别乘以 1 , 2 , … , 9 1,2,\dots,9 1,2,…,9 再求和,即 0 × 1 + 6 × 2 + … … + 2 × 9 = 158 0\times 1+6\times 2+……+2\times 9=158 0×1+6×2+……+2×9=158,然后取 158   m o d   11 158 \bmod 11 158mod11 的结果 4 4 4 作为识别码。

你的任务是编写程序判断输入的 ISBN 号码中识别码是否正确,如果正确,则仅输出 Right;如果错误,则输出你认为是正确的 ISBN 号码。

输入格式

一个字符序列,表示一本书的 ISBN 号码(保证输入符合 ISBN 号码的格式要求)。

输出格式

一行,假如输入的 ISBN 号码的识别码正确,那么输出 Right,否则,按照规定的格式,输出正确的 ISBN 号码(包括分隔符 -)。

样例 #1

样例输入 #1

0-670-82162-4

样例输出 #1

Right

样例 #2

样例输入 #2

0-670-82162-0

样例输出 #2

0-670-82162-4

提示

2008 普及组第一题


二、参考代码

#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;


int main(void)
{
	char ch1[15] = {};
	for (int i = 0; i < 13; i++)
	{
		cin >> ch1[i];
	}

	int j = 1;
	int sum = 0;
	for (int i = 0; i < 12; i++)
	{
		if (ch1[i] != '-')
		{
			int num = ch1[i] - '0';
			sum += num * j;
			j++;
		}
	}
	sum %= 11;
	//cout << sum << endl;
	if (sum == 10)
	{
		if (ch1[12] == 'X')
		{
			cout << "Right" << endl;
		}
		else
		{
			for (int i = 0; i < 12; i++)
			{
				cout << ch1[i];
			}
			cout << 'X';
		}
	}
	else
	{
		if (int(ch1[12]-'0') == sum)
		{
			cout << "Right" << endl;
		}
		else
		{
			for (int i = 0; i < 12; i++)
			{
				cout << ch1[i];
			}
			cout << sum;
		}
	}

}


标签:670,ISBN,号码,int,识别码,NOIP2008,C++,样例
From: https://blog.csdn.net/Zr1ose/article/details/136946022

相关文章

  • C++ 三角函数
    文章目录一、题目描述三角函数题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示二、参考代码一、题目描述三角函数题目描述输入一组勾股数a,b......
  • C++ 最长连号
    文章目录一、题目描述最长连号题目描述输入格式输出格式样例#1样例输入#1样例输出#1提示数据规模与约定二、参考代码一、题目描述最长连号题目描述输入长度为nn......
  • 字符串翻转(C++)
    示例:        翻转前:tobeornottobe        翻转后:otebrotonoteb基本思路:        利用strtok字符串切割函数拿到每一部分,存储到一个字符串数组中,再将每一个字符串数组倒置。最后顺序输出。程序代码:#include<iostrem>#include<string>#......
  • 2024华为OD统一考试(C卷)最新题库(Java & Python & C++)
    关于华为OD​华为的员工补充途径有三种,分别是校招、OD转正和社招。校招是华为唯一的正式员工入职途径,但是从近几届开始竞争非常激烈,尤其是在CV、AI、NLP等赛道上,所以对于C9等专业的学生来说,可以考虑转向一些冷门方向。​OD转正是指在华为工作满一年之后,可以根据部门OD......
  • C++之引用
    1.引用的概念引用不是定义一个变量,而是给已经存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它所引用的变量使用同一块内存空间。类型&引用变量名(对象名)=引用实体 inta=10;int&b=a;//表示b是a的别名运行结果如下: 注意:引用类型必须和引用实......
  • UE4 c++ -- 简单的UMG
    说明学习一下如何将Widget蓝图与C++连接起来,将处理逻辑写在C++中基础在蓝图中,我们显示Widget是通过一个Actor或者PlayerController,甚至关卡蓝图,利用CreateWidget以及AddToViewPort使得Widget显示在屏幕上的所以在C++中也是一样,一般来说由于Actor的销毁比如角色死亡,会导致其......
  • 复试C++看程序写结果 易错
    复试C++看程序写结果  易错#include<iostream>usingnamespacestd;voidfunction(char*&s1,char*&s2){inti=0;for(;*s1!=*s2;s1++,s2++)i++;//当两个指针同时指向字符'a'时,循环结束,i=7*(s1-1)='\0';*(s2-1)=......
  • c++小游戏
    #include<bits/stdc++.h>#include<windows.h>usingnamespacestd;inta,b,c;voidOK(){ system("cls"); cout<<"你时不时有饼?\n(1:yes2:NO)\n"; cin>>a; if(a==1){ cout<<"您以通关!"; }else{ system(&q......
  • C/C++知识总结(2)
    1.C++中的class和struct区别两者都有成员函数以及公有私有部分;class成员默认private,struct成员默认public。class默认private继承,struct默认public继承。2.C与C++中struct区别C语言中struct是用户自定义数据类型;C++中struct是抽象数据类型,支持成员函数的定义。C语言中stru......
  • C++U6-09 - 数学专题(二)各种进制知识
    学习目标 进制  二进制转十进制 二进制 代码 十进制转二进制代码 十进制转二进制小数方式,转其他进制同理 二进制转八进制方法二 八进制转二进制方法二二进制转十六进制方法二 代码 代码 十六进制转换成二进制 n进制转十进制小数部分......