洛谷p1055 ISBN号码(C语言)

以下注解部分由chat GPT生成,代码由我本人输入

1. 读取输入: 代码首先定义了一个字符数组`a[15]`用于存储用户输入的ISBN号码。然后使用`scanf`函数从标准输入读取这个号码。

2. 处理和验证逻辑:
    - 通过一个`for`循环,代码遍历输入的ISBN号码中的每个字符(除了最后一个校验字符)。
    - 如果字符是分隔符'-',程序将跳过这个字符。
    - 对于其他数字字符,程序将计算一个加权和。加权计算方式是将当前数字字符转换为数字(`a[i] - '0'`),然后乘以它在序列中的位置(`j`),并累加到`sum`变量中。
    - 每一次加权和累加后,程序将`sum`对11取模,用于生成最终的校验数字。

3. 校验和输出:
    - 代码检查输入的最后一个字符(校验字符),看它是否与计算出的校验数字匹配。
    - 如果匹配(或者当计算出的校验数字为10且校验字符为'X'时),程序输出"Right"。
    - 如果不匹配,程序将输出修改后的正确的ISBN号码,其中最后一个字符被替换为正确的校验数字(如果校验数字为10,则输出'X')。

 778adf02645c42f38cea8f1c787f466e.png

#include <stdio.h>

int main() 
{
    char a[15];
    scanf("%s", a); // 从标准输入读取ISBN号码
    int i, j = 0, sum = 0;
    
    // 遍历ISBN号码中的字符
    for (i = 0; i <= 11; i++) 
    {
        if (a[i] == '-')
            continue; // 如果是分隔符'-',则跳过此字符
        else 
        {
            j++; // j表示当前处理的位置
            sum += j * (a[i] - '0'); // 计算部分和
            sum = sum % 11; // 对11取模
        }
    }

    // 检查计算出的识别码是否与输入的识别码匹配
    if (a[12] - '0' == sum || (a[12] == 'X' && sum == 10))
        printf("Right"); // 识别码正确,输出"Right"
    else 
    {
        // 识别码不正确,输出正确的ISBN号码
        for (i = 0; i <= 11; i++) 
        {
            printf("%c", a[i]); // 输出字符
        }
        if (sum == 10)
            printf("X"); // 识别码为10,输出'X'
        else
            printf("%d", sum); // 输出计算出的识别码
    }

    return 0;
}

 

 

 

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

handsomezqh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值