Roman numerals

MySQL, SQL

Jump to: navigation, search

Преобразование числа, записанного римскими цифрами, в INT:

CREATE FUNCTION rtoi(roman VARCHAR(15)) RETURNS INT DETERMINISTIC
BEGIN
    DECLARE numeral CHAR(7) DEFAULT 'IVXLCDM';
    DECLARE digit TINYINT;
    DECLARE prev INT DEFAULT 0;
    DECLARE current INT;
    DECLARE sum INT DEFAULT 0;
    SET roman = UPPER(roman);
    WHILE LENGTH(roman) > 0 DO
        SET digit := LOCATE(RIGHT(roman, 1), numeral) - 1;
        SET current := POW(10, FLOOR(digit / 2)) * POW(5, MOD(digit, 2));
        SET sum := sum + POW(-1, current < prev) * current;
        SET prev := current;
        SET roman = LEFT(roman, LENGTH(roman) - 1);
    END WHILE;
    RETURN sum;
END//

Personal tools
ссылка