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;
}
相关推荐
MicroTech20252 分钟前
微算法科技(NASDAQ :MLGO)量子化边缘检测技术:重塑图像处理的新范式
图像处理·科技·算法
WolfGang0073217 分钟前
代码随想录算法训练营 Day47 | 图论 part05
算法·图论
我是无敌小恐龙7 分钟前
Java SE 零基础入门Day06 方法重载+Debug调试+String字符串全套API详解(超全干货)
java·开发语言·人工智能·python·transformer·无人机·量子计算
AI+程序员在路上8 分钟前
Qt6读取rtsp视频流的几种方法
开发语言·qt6.3
猿长大人14 分钟前
算法 | 轮廓提取随笔 —— 关于像素、阈值和直觉的碎碎念
图像处理·算法
码农飞哥17 分钟前
从Java后端到AI应用开发,我这两年做了什么
java·开发语言·人工智能
啦啦啦_999921 分钟前
1. 线性回归之 向量&矩阵
算法·矩阵·线性回归
胡童嘉27 分钟前
C语言考研《谭浩强C语言》教材第一章理论+实践汇总
c语言·开发语言·考研
初心未改HD29 分钟前
Go语言Slice切片底层原理深度解析
开发语言·golang
DolphinDB智臾科技29 分钟前
DolphinDB 走进东南大学 | 新型电力系统高频数据处理与算法落地实战
算法