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