1514: 条形码校验位
时间限制: 1 Sec 内存限制: 128 MB
提交: 3381 解决: 369
题目描述
EAN商品条形码由13位数字构成,它是商品的“身份证”,前8位是厂商识别代码,接着4位是商品项目代码,最后一位是校验码。校验码是由前12位数按下面的步骤计算得到的。
请实现函数getEAN13(),函数原型为:int getEAN13(char *ean);
其中ean是条形码的前12位,返回值为校验码。
如ean=“690123456789”,该函数返回2。
为便于程序调试并确保多次调试中的输入数据的一致性,可通过输入重定向方法从test1.dic文本文件中读取条形码前12位,输入样例文件test1.dic可以通过wget从此处下载。
输入
输出
提示
(1) 不可变更要求的函数原型。
(2) 仅可提交指定的函数及该函数中调用的其它自定义函数代码。
#include<stdio.h>
int getEAN13(char *ean);
int getEAN13(char *ean){
int i,x=0,sum1=0,sum2=0,a=0,b=0,c=0;
for(i = 0;i < 12;i++){
if(i%2 != 0){
sum1=sum1+(int)ean[i]-48;//把字符型转为整型
}
else{
sum2=sum2+(int)ean[i]-48;//48指的是字符ascii码值减去48的值为其对应的整数值
}
}
a=sum1*3;
b=a+sum2;
c=b%10;
x=(10-c)%10;
return x;
}
int main(){
char arr[1000];
int q,mn=0;
for(q=0;q<12;q++){
scanf("%c",&arr[q]);
}
mn=getEAN13(arr);
printf("%d",mn);
}
题目仅需提交getEAN13函数部分,main函数是我自己写的测试函数;
因为输入进来的数是以字符的形式输进来的,所以计算时要转成int整型来计算,结果才会正确。