本文主要是介绍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个数字组成的字符串
输出格式
一个字符,表示所求的校验码
#include <stdio.h>
#include <string.h>
#include <math.h>int check(char arr[11])
{int weight[11]={29,23,19,17,13,11,7,5,3,2,1};int sum=0;int i;for(i=0;i<10;i++){sum+=(arr[i]-'0')*weight[i];}int reminder=sum%11;if(reminder==0){return 0;}else if(reminder==10){return 10;}else{return 11-reminder;}
}int main()
{char str[11];gets(str);int end=check(str);if(end==10){printf("%c",'X');}else{printf("%d",end);}return 0;
}
这篇关于C语言:生成校验码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!