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;
}
相关推荐
apihz7 分钟前
经纬度制作高清卫星图片免费 API 接口详解
开发语言·ios·swift
战族狼魂9 分钟前
每日一课:算法系统学习路线
人工智能·算法·大模型·大语言模型
变量未定义~19 分钟前
连通块中点的数量、堆箱子(4星)
算法
娇气的红酒20 分钟前
微软对PHP支持的改进,及其它一些胡言乱语
开发语言·microsoft·php
霸道流氓气质23 分钟前
Harness Engineering 模块化指令实战:告别 600 行巨型 AGENTS.md
开发语言·人工智能·python
j7~31 分钟前
【算法】专题二:滑动窗口之水果成蓝,找到字符串中所有字⺟异位词等算法题
c++·算法·滑动窗口·水果成蓝·最小字串覆盖·优选算法精选
木木子2235 分钟前
# 星座配对深度解析:Select 长列表选择器、矩阵评分算法与数据驱动建议
java·算法·华为·矩阵·harmonyos
吠品41 分钟前
Mac定时关机、开机自动化:用shutdown和pmset就够了
android·java·开发语言
asdzx6744 分钟前
C# 通过模板生成 Word 文档:文本与图片占位符替换完整攻略
开发语言·c#·word
wbs_scy1 小时前
仿 muduo 高并发服务器项目:实现轻量级日志宏,方便后续网络库调试
开发语言·php