Това решение е на Pascal, но е изключително лесно да се обърне на VB, пък и е добре малко да се напънеш:
{ program to translate Arabian To Roman }
{ by Krylov Dmitriy, krylov@mail.primorye.ru }
program TranslateArabianToRoman;
const
TransTable: array[1..13] of record
AN: word;
RN: string[2];
end = ((AN: 1000; RN:'M'), (AN: 900; RN: 'CM'), (AN: 500; RN: 'D'),
(AN: 400; RN: 'CD'), (AN: 100; RN: 'C'), (AN: 90; RN: 'XC'),
(AN: 50; RN: 'L'), (AN: 40; RN: 'XL'), (AN: 10; RN: 'X'),
(AN: 9; RN: 'IX'), (AN: 5; RN: 'V'), (AN: 4; RN: 'IV'),
(AN: 1; RN: 'I'));
var
RomanNumber: string;
ArabianNumber: longint;
CurNum: byte;
CurSymb: string[2];
CurVal: word;
begin
Write('Input Arabian Number: ');
ReadLn(ArabianNumber);
{--- Translate ---------}
RomanNumber := '';
CurNum := 1;
repeat
CurSymb := TransTable[CurNum].RN;
CurVal := TransTable[CurNum].AN;
while CurVal <= ArabianNumber do
begin
RomanNumber := RomanNumber + CurSymb;
Dec(ArabianNumber, CurVal);
end;
Inc(CurNum);
until ArabianNumber <= 0;
{--- End of translate ---------}
WriteLn('Roman Number: ', RomanNumber);
end.