当前位置:网站首页>C语言每日一题——[NOIP2008]ISBN号码(牛客网第76题)
C语言每日一题——[NOIP2008]ISBN号码(牛客网第76题)
2022-04-21 13:53:00 【头发没有代码多】
目录
描述
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
输入描述:
只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)。
输出描述:
共一行,假如输入的ISBN号码的识别码正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
示例1
输入:0-670-82162-4
输出:Right
示例2
输入:0-670-82162-0
输出:0-670-82162-0
图解


详解



代码
#include<stdio.h>
int main()
{
char a = 'w';
int i = 0;
int j = 0;
int t = 1;
int sum = 0;
int mod;
int k[10] = { 0 };
for (i = 0; i < 13; i++)
{
scanf("%c", &a);
if ((a - '0') >= 0 && (a - '0' <= 9) || a == 'X')
k[j++] = a - '0';
}
for (i = 0; i < 9; i++)
{
sum = k[i] * (t++) + sum;
}
mod = sum % 11;
if (mod == 10 && a == 'X') // 余数为10,结尾位X
printf("Right");
if (mod == 10 && a != 'X') //余数为10,结尾不为X
{
for (i = 0; i < 9; i++)
{
if (i == 0)
printf("%d-", k[i]);
else if (i == 4 || i == 9)
printf("-%d", k[i]);
else
printf("%d", k[i]);
}
printf("-X");
}
if (k[9] == mod && mod != 10) //结尾等于余数
printf("Right");
if (k[9] != mod && mod != 10)//结尾不等于余数
{
for (i = 0; i < 9; i++)
{
if (i == 0)
printf("%d-", k[i]);
else if (i == 4 || i == 9)
printf("-%d", k[i]);
else
printf("%d", k[i]);
}
printf("-%d", mod);
}
return 0;
}
小优化
可将char a[13]={"w"};换为char a='w';因为我们在输入数值的时候是在for语句下输入的,并且每次输入完之后会对这个值进行判断,并决定是否存储到int型数组中,所以for每循环一次,我们可将char a[13]中遍历到的数字换成下一个,没必要开辟13个空间,一个就够了。
如果最后一位等于'X',不必将它的ASCII码值存到int k数组的第十位因为我们始终都没有用到它的ascii码值
优化后代码
#include<stdio.h>
int main()
{
char a = 'w';
int i = 0;
int j = 0;
int t = 1;
int sum = 0;
int mod;
int k[10] = { 0 };
for (i = 0; i < 13; i++)
{
scanf("%c", &a);
if ((a - '0') >= 0 && (a - '0' <= 9) )
k[j++] = a - '0';
}
for (i = 0; i < 9; i++)
{
sum = k[i] * (t++) + sum;
}
mod = sum % 11;
if (mod == 10 && a == 'X') // 余数为10,结尾位X
printf("Right");
if (mod == 10 && a != 'X') //余数为10,结尾不为X
{
for (i = 0; i < 9; i++)
{
if (i == 0)
printf("%d-", k[i]);
else if (i == 4 || i == 9)
printf("-%d", k[i]);
else
printf("%d", k[i]);
}
printf("-X");
}
if (k[9] == mod && mod != 10) //结尾等于余数
printf("Right");
if (k[9] != mod && mod != 10)//结尾不等于余数
{
for (i = 0; i < 9; i++)
{
if (i == 0)
printf("%d-", k[i]);
else if (i == 4 || i == 9)
printf("-%d", k[i]);
else
printf("%d", k[i]);
}
printf("-%d", mod);
}
return 0;
}
版权声明
本文为[头发没有代码多]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_49449676/article/details/123985939
边栏推荐
- ssh服务器--密钥认证
- MySQL read / write separation server -- maxscale service
- Go 对文件的相关操作整理(持续更新)
- The importance of computing edge in Networkx: edge intermediate number or intermediate centrality edge_ betweenness
- centos 离线安装mysql
- MySQL configures PXC high availability cluster
- Shandong University project training raspberry pie promotion plan phase II (VII) objects and categories
- Chapter 1 basic knowledge of password - Summary of commercial password application and security evaluation
- RHCE搭建简单web网站
- MySQL data backup management
猜你喜欢

无穷小和无穷大

微积分之微分

SQL injection vulnerability shooting range - sqli labs learning

The stack concept is transformed into cyclic bracket matching inverse Polish expression simulation to achieve full dry goods

RHCE builds a simple web site

Zabbix5系列-监控海康威视摄像头 (七)

Zabbix5系列-监控华为、H3C交换机(snmpv2c/snmpv3/snmptrap) (二)

基于Anki+Vocabulary的英语单词记忆法

SQL注入漏洞靶场-sqli-labs学习

Zabbix5 series - monitoring redis (XI)
随机推荐
Chapter III commercial password standards and product applications of commercial password application and security evaluation - Summary
iscsi
SQL injection vulnerability shooting range - sqli labs learning
< 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (12)
微信退款 No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
The stack concept is transformed into cyclic bracket matching inverse Polish expression simulation to achieve full dry goods
流量分析(CTF)
FTP service
MYSQL配置PXC高可用集群
MYSQL搭建MHA集群主从竞主
汇编语言程序设计 中国大学Mooc郑州大学 网课 测试题目和答案
C语言实现扫雷
< 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (9)
2021.10.24 程序员(媛)节日快乐!!!
Zabbix5系列-监控华为、H3C交换机(snmpv2c/snmpv3/snmptrap) (二)
Oracle backup failed with error ora-04063: View sys KU_ RADM_ FPTM_ VIEW has errors
多线程之单例
Redis主从复制、持久化
< 2021SC@SDUSC > Application and practice of software engineering in Shandong University jpress code analysis (10)
1 ActiveMQ介绍与安装