Я совершенно новичок в MIPS, но я работаю над попыткой преобразовать свою Java-программу, которая принимает данные от пользователя в виде римских цифр и преобразует их в целые числа, а затем распечатывает их. Вот моя программа на Java:
private static int decodeSingle(char letter) {
switch(letter) {
case 'M': return 1000;
case 'D': return 500;
case 'C': return 100;
case 'L': return 50;
case 'X': return 10;
case 'V': return 5;
case 'I': return 1;
default: return 0;
}
}
public static int decode(String roman) {
int result = 0;
String uRoman = roman.toUpperCase(); //case-insensitive
for(int i = 0; i < uRoman.length() - 1; i++) {//loop over all but the last character
//if this character has a lower value than the next character
if (decodeSingle(uRoman.charAt(i)) < decodeSingle(uRoman.charAt(i + 1))) {
//subtract it
result -= decodeSingle(uRoman.charAt(i));
} else {
//add it
result += decodeSingle(uRoman.charAt(i));
}
}
//decode the last character, which is always added
result += decodeSingle(uRoman.charAt(uRoman.length() - 1));
return result;
}
public static void main(String[] args) {
System.out.println(decode("MCMXC")); //1990
System.out.println(decode("MMVIII")); //2008
System.out.println(decode("MDCLXVI")); //1666
}
Я хотел бы настроить программу со следующими двумя массивами. Моя идея заключается в том, что я могу сравнить любой пользовательский ввод с all_numerals
(т.е. пользовательский ввод V
по сравнению с V
, который затем даст ему свое значение в индексе. Когда у нас есть значение индекса, мы можем сравнить его со значением index в all_values
Мне, очевидно, понадобится цикл для повторения пользовательского ввода.
# put this somewhere in the data section
all_numerals: .asciiz "IVXLCDMivxlcdm"
all_values: .byte 1, 5, 10, 50, 100, 500, 1000, 1, 5, 10, 50, 100, 500, 1000
Мой вопрос: вам нужно вставлять значения для all_numerals
и all_values
в регистры или вы можете просто сравнить массивы как есть? Будучи совершенно новым для MIPS, является ли это наиболее эффективным и логичным способом?