Requisitos de la asignatura
Código: miles, centenas, decenas y unidades se procesan en secuencia
class Solution {
public:
map<int,string> m;
string intToRoman(int num) {
string roman;
//存储数字各个位(个位、十位、百位)上的数
int bitNumber;
mapInit();
bitNumber = num / 1000;
strRomanFun(roman, bitNumber, 1000);
num %= 1000;
bitNumber = num / 100;
strRomanFun(roman, bitNumber, 100);
num %= 100;
bitNumber = num / 10;
strRomanFun(roman, bitNumber, 10);
num %= 10;
bitNumber = num / 1;
strRomanFun(roman, bitNumber, 1);
num %= 1;
return roman;
}
void mapInit()
{
m[1] = "I";
m[4] = "IV";
m[5] = "V";
m[9] = "IX";
m[10] = "X";
m[40] = "XL";
m[50] = "L";
m[90] = "XC";
m[100] = "C";
m[400] = "CD";
m[500] = "D";
m[900] = "CM";
m[1000] = "M";
}
void strRomanFun(string& Roman, int bitNumber, int bit)
{
if (bitNumber == 4)
{
Roman += m[4 * bit];
}
else if (bitNumber == 9)
{
Roman += m[9 * bit];
}
else
{
if (bitNumber / 5)
{
Roman += m[5 * bit];
}
for (size_t i = 0; i < (bitNumber%5); i++)
{
Roman += m[bit];
}
}
}
};
Prediseñado
Se define un mapa de variables miembro en la clase para que las tres funciones puedan acceder fácilmente al mapa.
La función de subfunción mapInit es responsable de inicializar la
función de subfunción de mapa strRomanFun es responsable de agregar la cadena bit a bit
toda la idea
Primero defina un mapa, que almacena números y los caracteres romanos correspondientes.
Luego, realice la conversión de caracteres romanos en el orden de miles, centenas, decenas y unidades:
- Si el número en este bit es igual a 0 , omita este bit
- Si el número en este bit es mayor que 0 y menor que 4 , agregue el número correspondiente del bit 'valor 1' después de la cadena
- Si el número en este bit es igual a 4 , agregue el 'valor 4' de este bit después de la cadena
- Si el número en este bit es mayor que 4 y menor que 9 , agregue el 'valor 5' de este bit y el 'valor 1' restante después de la cadena
- Si el número en este bit es igual a 9 , agregue el 'valor 9' de este bit después de la cadena
Tome 1994 como ejemplo: la
cadena está inicialmente vacía al principio
El primero es el número 1 en el lugar de los miles, porque 1 es mayor que 0 y menor que 4, por lo que se debe agregar un 'valor 1' en el lugar de los miles después de la cadena, es decir, 'M'. "METRO"
El siguiente es el número 9 en el dígito de las centenas, y el "valor 9" en el dígito de las centenas se agrega al final de la cadena, que es el "CM" de 900. "MCM"
El siguiente es el número 0 en el lugar de la decena, y el 'valor 9' de la decena se agrega al final de la cadena, que es el 'XC' de 90. "MCMXC"
El último es el número 4 en el dígito de las unidades, y el 'valor 4' del dígito de las unidades se agrega al final de la cadena, que es el 'IV' de 4. "MCMXCIV"
Que aprendí
1. Reaprendí el método de insertar elementos en el mapa.
- Inserte par con inserto
- Insertar value_type con insertar
- Usar método de matriz
m[1] = "I";
En esta pregunta, utilicé el tercer método. Cabe señalar que si hay un valor en el mapa, este método sobrescribirá el valor anterior.
Artículos de referencia para operaciones de contenedor de mapas