北理工乐学41. 计算通用产品代码(UPC)的校验位
41. 计算通用产品代码(UPC)的校验位
背景
许多年来,货物生产商都会把超市售卖的每件商品上放置一个条码。这种被称为通用产品代码(Universal Product Code,缩写UPC)的条码可以识别生产商和产品。超市可以通过扫描产品上的条码来确定支付此项商品的费用。每一个条码由十二位数字构成,通常这些数字会显示在条码下面。例如,包装为26盎司的Morton牌碘化盐所用条码下的数字是:
0 24600 01003 0
第一个数字表示商品的种类(0表示大部分的食品杂货,2表示需要称量的货品,3表示药品或和健康相关的商品,而5表示优惠券)。接下来的一组五位数字用来识别生产商。而第二组五位数字则用来区分产品类型(其中包括包装尺寸)。最后一位数字是“校验位”,它可以帮助鉴别先前数字中的错误。如果条码扫描出现错误,那么前十一位数字和最后一位数字可能会不一致,而超市扫描机也会拒绝整个条码。
下面是一种计算校验位的方法:首先把第一位、第三位、第五位、第七位、第九位和第十一位数字相加。然后把第二位、第四位、第六位、第八位和第十位数字相加。接着把第一次加法结果乘以3后再加上第二次加法的结果。随后,再把上述结果减去1。减法后的结果除以10取余数。最后,用9减去上一步骤中得到的余数。现在以Morton碘盐为例,第一组数字的加法是0+4+0+0+0+3=7,而第二组数字的加法是2+6+0+1+0=9。把第一组加法值乘以3后再加上第二组加法值得到的结果是30。再减去1,结果变为29。再把这个值除以10取余数为9。9在减去余数结果9,最终值为0。
输入
每次输入三行数据,第一行是UPC的第一位数字,第二行是UPC的第一组五位数字,第三行是UPC的第二组五位数字。
输出
UPC的校验位
提示
本题有隐藏测试用例。如果想多找不同的实例验证你的算法,可以拿身边书或食品背后的条码测试一下。
代码:
#include <stdio.h> #include <string.h> #define N 10000 int max(int a, int b); int todigit(char c); int main(void) { /*读入数据,用getchar()读入空格 然后按照要求计算*/ char ch[20] = { '0' }; ch[0] = getchar(); getchar(); for (int i = 1; i < 6; i++) ch[i] = getchar(); getchar(); for (int i = 6; i < 11; i++) ch[i] = getchar(); getchar(); int a[20] = { 0 }; for (int i = 0; i < 11; i++) a[i] = todigit(ch[i]); int res1 = a[0] + a[2] + a[4] + a[6] + a[8] + a[10]; int res2 = a[1] + a[3] + a[5] + a[7] + a[9]; int ret = res1 * 3 + res2 - 1; ret = ret % 10; ret = 9 - ret; printf("%d\n", ret); return 0; } int max(int a, int b) { return a > b ? a : b; } int todigit(char c) { int ans = 0; if ('0' <= c && c <= '9') ans = c - '0'; else ans = 0; return ans; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人