• C语言:生成校验码


    题目描述

    某商品的编号是有11位字符串组成,前10位的每一位都是一个0~9之间的数字,最后一位是一个校验码。校验码为0~10之间的数值,如果等于10,用大写“X”表示。校验规则如下:

    sum=∑(ci×wi),其中ci是字符对应的数值,wi是对应的位权。将和值对11取余,如果余数为0,则表示该编号正确,否则编号有误。

    从第一位开始到第11位的位权依次为:{29,23,19,17,13,11,7,5,3,2,1}

    例如编号“15975374136”,依据上述规则,其sum=1×29+5×23+9×19+7×17+5×13+3×11+7×7+4×5+1×3+3×2+6×1=616,
    616 mod 11=0,所以这是一个正确的编码。
    类似的:3574186412X,78952147854,65892147891,96547123698都是正确的编码。
    现在,给定这个编码的前面10位,请编程求出第11位校验码。如果校验码等于10的话,用大写的“X”表示。

    提示

    输入输出格式

    输入格式

    一行,由10个数字组成的字符串

    输出格式

    一个字符,表示所求的校验码

    1. #include <stdio.h>
    2. #include <string.h>
    3. #include <math.h>
    4. int check(char arr[11])
    5. {
    6. int weight[11]={29,23,19,17,13,11,7,5,3,2,1};
    7. int sum=0;
    8. int i;
    9. for(i=0;i<10;i++)
    10. {
    11. sum+=(arr[i]-'0')*weight[i];
    12. }
    13. int reminder=sum%11;
    14. if(reminder==0)
    15. {
    16. return 0;
    17. }else if(reminder==10)
    18. {
    19. return 10;
    20. }else{
    21. return 11-reminder;
    22. }
    23. }
    24. int main()
    25. {
    26. char str[11];
    27. gets(str);
    28. int end=check(str);
    29. if(end==10)
    30. {
    31. printf("%c",'X');
    32. }else{
    33. printf("%d",end);
    34. }
    35. return 0;
    36. }

  • 相关阅读:
    2023贵州财经大学计算机考研信息汇总
    (转)c 多张图片生成avi视频
    计算机视觉 01(介绍)
    QT软件开发-基于FFMPEG设计视频播放器-支持软解与硬解(一)
    KMP 算法
    浦惠钱包app拉新推广渠道 实时数据
    mysql---视图详解
    分布式数据库系统
    docker容器化技术
    基于SpringBoot+Vue的博物馆管理系统
  • 原文地址:https://blog.csdn.net/2201_75833091/article/details/136159125