各个位上的数字单独操作,可将该数存为字符数组,若要取该数字,用arr[i] - '0',就是ASCII码的差值,范围为0—9.
#include <stdio.h>
int main()
{
char arr[13]={0};
int i, j, s=0;
scanf("%s", &arr); //输入字符串,回车为止
for(i=0,j=1; i<11; i++)
if(arr[i] != '-'){ //字符'-'不参与操作
s = s + (arr[i] - '0') * j; 数字值乘以数字序数,再求和
j++; //j从1增长到9
}
int m = s % 11; //m可能的值是0—10
if(m == arr[12] -'0' || (m == 10 && arr[12] == 'X'))
//验证最后一位是否为识别码
printf("Right\n");
else{
if(m == 10){
for(i=0; i<12; i++)
printf("%c", arr[i]);//先打前12个字符
printf("X"); 最后打识别码
}
else{
for(i=0; i<12; i++)
printf("%c", arr[i]);
printf("%d", m);
}
}
return 0;
}

京公网安备 11010502036488号