PAT Clase B 1031 ID ID 15 (puntos)

tema

Un número de identificación legal se compone de un área de 17 dígitos, un número de fecha y un número de secuencia más un código de verificación. Las reglas de cálculo del código de verificación son las siguientes:

Primero, se ponderan y suman los primeros 17 dígitos, y la distribución del peso es: {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4, 2}; luego el valor obtenido y el módulo calculado 11 Z ; de acuerdo con la relación correspondiente al Z valor final y al M valor de la suma de control :

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

Ahora, con algunos números de identificación, verifique la validez del código de verificación y envíe el número en cuestión.

Formato de entrada:

Ingrese la primera línea para dar un número entero positivo NN N ( ≤ 1 0 0 \ le 100 1 0 0 ) es el número de números de identificación ingresados. Luego NN N líneas, cada línea da un número de identificación de 18 dígitos.

Formato de salida:

Salida 1 número de identificación problemático por línea en el orden de entrada. No se verifica si los primeros 17 dígitos son razonables, sino solo si los primeros 17 dígitos son todos números y el código de verificación del último dígito se calcula con precisión. Si todos los números son normales, entonces salida All passed .

Ejemplo de entrada 1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

Muestra de salida 1:

12010X198901011234
110108196711301866
37070419881216001X

Ejemplo de entrada 2:

2
320124198808240056
110108196711301862

Muestra de salida 2:

All passed

Gracias a Fan Jianzhong, Fuyang Teachers College, por datos adicionales

Gracias a Shi Xifan, profesor de Zhijiang College, Universidad de Tecnología de Zhejiang, por corregir los datos

Código


#include<iostream>
using namespace std;
int main()
{
    
    
	int i,N, a[17] = {
    
     7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 },sum;
	char func[11] = {
    
    '1','0','X', '9', '8', '7', '6', '5', '4', '3','2'};
	string input;
	bool flag = true,in=false;
	cin >> N;
	while (N--)
	{
    
    
		in = false;
		sum = 0;
		cin >> input;
		for (i = 0; i<17; i++)
		{
    
    
			if (input[i] >= '0' && input[i] <= '9')
			{
    
    
				sum += a[i] * int(input[i]-48);
			}
			else
			{
    
    
				in = true;
				break;
			}
		}
		if(in||func[sum%11]!=input[17])
		{
    
     
			flag = false;
			cout << input<<endl;
		}
	}
	if (flag)
		cout << "All passed";
	return 0;
}

Enlace de detalles de la pregunta

Supongo que te gusta

Origin blog.csdn.net/qq_41985293/article/details/114983504
Recomendado
Clasificación