栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

聪明人的游戏提高篇:第三章第一课:isbn (ISBN码)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

聪明人的游戏提高篇:第三章第一课:isbn (ISBN码)

这里要说明一下,这道题的题目和测试数据不相符,于是——我把题目改了一下:

[问题描述]

Farmer John的奶牛喜欢看书,并且Farmer John发现他的奶牛看了一些关于自然科学的书,产出了更多牛奶。他决定把原本廉价的小说换成关于自然科学的书。不幸的是,有些书掉进了泥浆里,它们的ISBN码看不清了。

ISBN码(国际标准图书编号)是十个阿拉伯数字组成的编码,用来唯一的标识一本书。如果要验证ISBN码是否正确,你要把第一个数字乘10,第二个数字乘9,第三个数字乘8,第四个数字乘7……直到最后一个数乘1,再把这些积累加起来,如果得数能被11整除(也就是11的倍数)的话,那么这就是一个合法的ISBN码。

比如说0201103311是一个合法的ISBN码,因为:

0×10 + 2×9 + 0×8 + 1×7 + 1×6 + 0×5 + 3×4 + 3×3 + 1×2 + 1×1

前九个数都在0 – 9之间。有时候,最后一个数字有要取10,那么我们就把最后一个数字写成大写X(这个时候就不叫数字了,呵呵),比如156881111X也是一个合法的ISBN码。你的任务就是在给你丢失了一个数字的ISBN码之后,确定那个丢失的数字。丢失的数字用“ ?”表示。

[输入格式]

一个10个数字组成的ISBN码,其中包含用“ ?”表示的丢失的数字。

[输出格式]

丢失的ISBN码(0-9或大写X)。如果标有“ ?”的地方没有数字可以使之成为合法的ISBN码,则输出-1。

[输入样例]

02011?3311

[输出样例]

0

好的,然后上代码:

#include 
#include 
#include 
using namespace std;
int i,k,n,t,s=0;
string a;
bool f=1;
int main()
{
	freopen ("isbn.in","r",stdin);
	freopen ("isbn.out","w",stdout);
	cin >>a;
	for (i=0;i<10;i++)
	{
		if (a[i]=='?')
			k=10-i;
		else if (a[i]>='0' && a[i]<='9')
		{
			s+=(a[i]-48)*(10-i);
		} 
		else
			s+=10;
	}
	t=(s/11+1)*11-s;
	if (s!=0)
	{
		if (s%11==0)
			cout <<0;
		else if (k!=1)
		{
			for (i=0;(t+i*11)/k<10;i++)
				if ((t+i*11)%k==0)
				{
					cout <<(t+i*11)/k;
					f=0;
					break;
				}
			if (f)
				cout <<-1;
		}
		else
		{
			if (t<10)
				cout < 

好了,代码很好懂,别忘点个赞。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/993645.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号