当前位置: 首页 > news >正文

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;
}

相关文章:

  • javaSE和javaEE区别
  • HTML 字符实体参考清单
  • Java使用Redis实现消息队列
  • 【算法】约瑟夫环问题解析与实现
  • 【正点原子STM32连载】 第五十二章 串口IAP实验 摘自【正点原子】APM32E103最小系统板使用指南
  • Lag-Llama:第一个时间序列预测的开源基础模型介绍和性能测试
  • PTA | Wifi密码
  • 5G网络eMBB、uRLLC、mMTC
  • “分布式透明化”在杭州银行核心系统上线之思考
  • 前端判断对象为空
  • 掌上新闻随心播控,HarmonyOS SDK助力新浪新闻打造精致易用的资讯服务新体验
  • redis为什么使用跳跃表而不是树
  • 二、ActiveMQ安装
  • Postgresql源码(124)两个事务更新同一行数据时的行为和原理分析
  • django定时任务(django-crontab)
  • notepad++打开文本文件乱码的解决办法
  • PCL常用的点云操作
  • RedisTemplate重写的一些模板
  • html的列表标签
  • 实习日志15
  • “五一”假期逛上海车展请提前购票,展会现场不售当日票
  • 国泰海通合并后首份业绩报告出炉:一季度净利润增逾391%
  • 78家公募年度业绩比拼:23家营收净利双升,十强座次微调
  • 逛了6个小时的上海车展。有些不太成熟的感受。与你分享。
  • 呼伦贝尔市委常委、组织部长闫轶圣调任内蒙古交通集团党委副书记
  • 上海通报5起违反中央八项规定精神问题