3683 - 身份证
时间限制 : 1 秒
内存限制 : 128 MB
如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以!
因为有人的身份证最后一位是"X"
实际上,除了最后一位的X,不会出现其它字母!
身份证号码18位 = 17位 + 校验码
校验码的计算过程:
例如:身份证前17位 = ABCDEFGHIJKLMNOPQ
A~Q 每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加)
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位,打印出校验码。
题目输入
题目输出
输入/输出样例
输入格式
13072719840805463
输出格式
X
C++解答
#include<iostream> using namespace std; int main() { int weight[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; string map="10X98765432"; int i,sum=0; string s; cin>>s; for(i=0;i<17;i++) { sum+=(s[i]-'0')*weight[i]; } cout<<map[sum%11]; return 0; }
Java解答
import java.util.*; public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); int sum=0; String str=input.nextLine(); int l=str.length(); int a[]=new int[l]; int b[]= {7 ,9 ,10, 5, 8 ,4, 2 ,1, 6 ,3 ,7 ,9, 10, 5 ,8, 4, 2}; String c[]= {"1","0","X","9","8","7","6","5","4","3","2" }; for(int i=0;i<l;i++) { a[i]=Integer.parseInt(str.substring(i, i+1)); sum+=a[i]*b[i]; } int yu=sum%11; System.out.print(c[yu]); } }