各个位上的数字单独操作,可将该数存为字符数组,若要取该数字,用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; }