| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2905 人关注过本帖
标题:ISBN号码问题
只看楼主 加入收藏
xjf120018
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-8-2
结帖率:40%
收藏
已结贴  问题点数:20 回复次数:4 
ISBN号码问题
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括 99 位数字、 11 位识别码和 33 位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如 00 代表英语;第一个分隔符-之后的三位数字代表出版社,例如 670670 代表维京出版社;第二个分隔符后的五位数字代表该书在该出版社的编号;最后一位为识别码。

识别码的计算方法如下:

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

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


代码如下:
#include<iostream>
#include<string>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
char a[14];
int b[14];
int main()
{
    int n=0,s;
    for(int i=1;i<=10;i++)
    {
        a[i]=getchar();
        if(a[i]=='-') i--;
        b[i]=a[i];
        b[i]-=48;
    }
    for(int i=1;i<=9;i++)
    n+=b[i]*i;
    s=n%11;
    if(s==b[10])
    {
        cout<<"Right";
        exit(0);
    }
    for(int i=1;i<=9;i++)
    {
        if(i==2||i==5) cout<<"-";
        cout<<a[i];
    }
    if(s==10) cout<<"-"<<"X";
    else cout<<"-"<<s;
    return 0;
}
评测时为什么会出现“On line 1 column 1, read 6-670, expected Right. 得分0”
请大佬帮忙看看!
搜索更多相关主题的帖子: 号码 位数 识别 int cout 
2018-08-02 16:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:0 
等你愿意贴链接再说
2018-08-03 08:53
xjf120018
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2018-8-2
收藏
得分:0 
回复 2楼 rjsp
https://www.
是这个吗?
2018-08-03 12:00
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
回复 3楼 xjf120018
是这个 https://www.

然后看你的代码,根本没考虑'X'的情况呀
随便给你一个测试用例 6-670-82162-X,你试试吧

----------------
程序代码:
#include  <stdio.h>

int main( void )
{
    char s[20];
    scanf( "%s", s );

    char c = (s[0]*1 + s[2]*2 + s[3]*3 + s[4]*4 + s[6]*5 + s[7]*6 + s[8]*7 + s[9]*8 + s[10]*9 - '0'*45)%11 + '0';
    c = (c=='9'+1) ? 'X' : c;

    if( c == s[12] )
        puts( "Right" );
    else
        s[12]=c, puts( s );
}

2018-08-03 13:42
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:10 
修改一下,将
    char c = (s[0]*1 + s[2]*2 + s[3]*3 + s[4]*4 + s[6]*5 + s[7]*6 + s[8]*7 + s[9]*8 + s[10]*9 - '0'*45)%11 + '0';
    c = (c=='9'+1) ? 'X' : c;
改为
    char c = "0123456789X"[(s[0]*1 + s[2]*2 + s[3]*3 + s[4]*4 + s[6]*5 + s[7]*6 + s[8]*7 + s[9]*8 + s[10]*9 - '0'*45)%11];
更漂亮
2018-08-03 16:53
快速回复:ISBN号码问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018431 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved