字符串处理 算法提高 身份证号码升级http://lx.lanqiao.cn/problem.page?gpid=T325
#include <stdio.h> #include <string.h> int main() { long long int a,b,c,d,n=0,m,l=16; char o; int A[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//用数组储存 scanf("%lld",&a); b=a/1000000000;//把数拆开,得出17位身份证号 c=a%1000000000; b=b*100000000000; a=b+19000000000+c; d=a; for (int i=0; i<17; i++) { n=n+a%10*A[l];//拆开后的个位数的和 a=a/10; l--; } m=n%11;//得到余数 switch (m) { case 0://余数对应的字符 o='1'; break; case 1: o='0'; break; case 2: o='x'; break; case 3: o='9'; break; case 4: o='8'; break; case 5: o='7'; break; case 6: o='6'; break; case 7: o='5'; break; case 8: o='4'; break; case 9: o='3'; break; case 10: o='2'; break; default: break; } printf("%lld%c",d,o); }