Cifrado digital PAT Clase B

Descripción del título
Esta pregunta requiere la realización de un método de cifrado digital.

Primero, fije un entero positivo A para el cifrado. Para cualquier entero positivo B, realice las siguientes operaciones en cada dígito en la posición correspondiente de A:

  • Para los dígitos impares, sume los números de los dígitos correspondientes y tome el resto de 13; aquí, J representa 10, Q representa 11 y K representa 12;
  • Para los dígitos pares, reste el número de A del número de B. Si el resultado es negativo, agregue otros 10.

Deje que el lugar de las unidades sea el primer lugar aquí.

Formato de
entrada La entrada se da en la secuencia de A y B en una línea, los cuales son números enteros positivos con no más de 100 dígitos, separados por espacios.

Formato de
salida Muestra el resultado cifrado en una línea.

Muestra de entrada
1234567 368782971

Salida de muestra
3695Q8118


respuesta:

解题思路: Comparación de A、Bla longitud en los cortos que componen el frente 前导0;

#include <iostream>
using namespace std;

int main()
{
    
    
	string A, B;
	cin >> A >> B;
	
	int n = A.size(), m = B.size();
	
	if(n > m)
	{
    
    
		int cnt = n - m;
		while(cnt --) B = '0' + B;
	}
	else
	{
    
    
		int cnt = m - n;
		while(cnt --) A = '0' + A;
		n = m;
	}

	for (int i = n - 1, cnt = 1; i >= 0; i --, cnt ++) 
	{
    
    
		if(cnt % 2) 
		{
    
    
			int sum = 0;
			sum = ((A[i] - '0') + (B[i] - '0')) % 13;
			char c = sum + '0';
			if(sum == 10) c = 'J';
			if(sum == 11) c = 'Q';
			if(sum == 12) c = 'K';
			B[i] = c;
		}
		else 
		{
    
    
			int d = (B[i] - '0') - (A[i] - '0');
			if(d < 0) d += 10;
			B[i] = d + '0';
		}
	}
	
	cout << B << endl;
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_46239370/article/details/114023112
Recomendado
Clasificación