c语言编程题求帮忙!!

身份证的最后一位是根据前17位数字计算出来的检验码。计算方法是:将身份证号码前17位数分别乘以不同的系数。从第1位到第17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2;将乘积之和除以11,余数可能为0 1 2 3 4 5 6 7 8 9 10。则根据余数,分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2。编写程序,输入身份证号码前17位,输出对应的检验码。
例如输入34052419800101001,输出X

#include<stdio.h>
int main(void)
{
int xishu[17] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
char s[20]="10X98765432";
char id[20];
int sum = 0,i,yushu;
printf("请输入身份证号:");
gets(id);
for (i = 0; i<17; i++)
{
sum = sum + (xishu[i] * (id[i] - '0'));
}
yushu = sum % 11;
printf("%c\n", s[yushu]);
return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-12-18
#include<stdio.h>
int main()
{int i,s=0,a[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
 char id[19];
 scanf("%s",id);
 for(i=0;i<17;i++)
   s+=a[i]*(id[i]-'0');
 printf("%c\n",s%11<10?'0'+s%11:'X');
 return 0;
}

第2个回答  2017-12-18
==是初学者吗
这样的问题最好说明哪一步不懂,自己练习还是最重要的
scanf一位一位的读入
乘除之后,switch case就ok了
相似回答