HI, I need someone to give me code for this in VB, and in c++..
I need a program the will convert a roman numeral into an integer...
Thanks, :)
ps: remember, vb and c++, cheers.
Printable View
HI, I need someone to give me code for this in VB, and in c++..
I need a program the will convert a roman numeral into an integer...
Thanks, :)
ps: remember, vb and c++, cheers.
The file attached should help you with what your after.
Here is some code i wrote (translated)
VB Code:
Private Sub Form_Load() MsgBox RomanToDecimal("CCCLXIX") End Sub Function RomanToDecimal(Roman As String) As String Dim conv(7) As Variant Dim arabic As Integer, state As Integer, length As Integer, i As Integer, sidx As Integer conv(0) = "I,1" conv(1) = "V,5" conv(2) = "X,10" conv(3) = "L,50" conv(4) = "C,100" conv(5) = "D,500" conv(6) = "M,1000" conv(7) = "0,0" length = Len(Roman) state = 0 Do While length >= 0 i = 0 sidx = length romnumber = CInt(Mid(conv(i), InStr(1, conv(i), ",") + 1, Len(conv(i)) - InStr(1, conv(i), ","))) Do While romnumber > 0 comp1 = (Right(Left(Roman, sidx), 1)) comp2 = Left(conv(i), 1) If (LCase(comp1)) = CStr(LCase(comp2)) Then If state > romnumber Then arabic = arabic - romnumber Else arabic = arabic + romnumber state = romnumber End If End If i = i + 1 If i = 8 Then GoTo ending: romnumber = CInt(Mid(conv(i), InStr(1, conv(i), ",") + 1, Len(conv(i)) - InStr(1, conv(i), ","))) Loop length = length - 1 Loop ending: RomanToDecimal = arabic End Function
Also - I can't do this in C++
Here was the base code, for anyone who doesn't understand mine:
PHP Code:function toNumber($roman)
{
$conv = array(
array("letter" => 'I', "number" => 1),
array("letter" => 'V', "number" => 5),
array("letter" => 'X', "number" => 10),
array("letter" => 'L', "number" => 50),
array("letter" => 'C', "number" => 100),
array("letter" => 'D', "number" => 500),
array("letter" => 'M', "number" => 1000),
array("letter" => 0, "number" => 0)
);
$arabic = 0;
$state = 0;
$sidx = 0;
$len = strlen($roman);
while ($len >= 0) {
$i = 0;
$sidx = $len;
while ($conv[$i]['number'] > 0) {
if (strtoupper($roman[$sidx]) == $conv[$i]['letter']) {
if ($state > $conv[$i]['number']) {
$arabic -= $conv[$i]['number'];
} else {
$arabic += $conv[$i]['number'];
$state = $conv[$i]['number'];
}
}
$i++;
}
$len--;
}
return($arabic);
}
// }}}
// {{{ toRoman()
/**
* Converts a number to its roman numeral representation
*
* @param integer $num An integer between 0 and 3999 inclusive
* that should be converted to a roman numeral
*
* @return string $roman The corresponding roman numeral
*
* @access public
* @author Sterling Hughes <[email protected]>
* @since PHP 4.0.5
*/
function toRoman($num) {
$conv = array(10 => array('X', 'C', 'M'),
5 => array('V', 'L', 'D'),
1 => array('I', 'X', 'C'));
$roman = '';
$num = (int) $num;
$digit = (int) $num / 1000;
$num -= $digit * 1000;
while ($digit > 0) {
$roman .= 'M';
$digit--;
}
for ($i = 2; $i >= 0; $i--) {
$power = pow(10, $i);
$digit = (int) $num / $power;
$num -= $digit * $power;
if (($digit == 9) || ($digit == 4)) {
$roman .= $conv[1][$i] . $conv[$digit+1][$i];
} else {
if ($digit >= 5) {
$roman .= $conv[5][$i];
$digit -= 5;
}
while ($digit > 0) {
$roman .= $conv[1][$i];
$digit--;
}
}
if ($num > 0) {
return('');
}
return($roman);
}
// }}}
}
As we're all throwing in examples in different languages, heres the src to a converter I had to do in college last year :
... pity its the wrong way around though :rolleyes:
Code:public class convert
{
public static void main (String[] args)
{
int userInput;
System.out.print("Please enter a number to convert : ");
userInput = TextIO.getInt();
if ((userInput > 3999) || (userInput < 0))
{
System.out.println("Can only convert numbers between 0 and 3999");
}
if ((Integer.toString(userInput).length() > 0) && (Integer.toString(userInput).length() < 5))
{
System.out.println(converter(userInput));
}
}
public static String converter(int int_number) {
String to_return = "";
if (Integer.toString(int_number).length() == 1)
{
to_return = onesToRomanNumerals(int_number);
}
else if (Integer.toString(int_number).length() == 2)
{
to_return = tensToRomanNumerals(int_number);
}
else if (Integer.toString(int_number).length() == 3)
{
to_return = hunsToRomanNumerals(int_number);
}
else if (Integer.toString(int_number).length() == 4)
{
to_return = thousandsToRomanNumerals(int_number);
}
return to_return;
}
public static String thousandsToRomanNumerals(int int_number) {
String var_temp = Integer.toString(int_number);
String var_huns = var_temp.substring(var_temp.length() - 3);
String var_thou = var_temp.substring(var_temp.length() - 4, var_temp.length() - 3);
String to_return = "";
switch (Integer.parseInt(var_thou)) {
case 0: to_return = hunsToRomanNumerals(Integer.parseInt(var_huns));
break;
case 1: to_return = "M" + hunsToRomanNumerals(Integer.parseInt(var_huns));
break;
case 2: to_return = "MM" + hunsToRomanNumerals(Integer.parseInt(var_huns));
break;
case 3: to_return = "MMM" + hunsToRomanNumerals(Integer.parseInt(var_huns));
break;
}
return to_return;
}
public static String hunsToRomanNumerals(int int_number) {
String var_temp = Integer.toString(int_number);
String var_tens = "", var_huns = "";
if (Integer.toString(int_number).length() == 3)
{
var_tens = var_temp.substring(var_temp.length() - 2);
var_huns = var_temp.substring(var_temp.length() - 3, var_temp.length() - 2);
}
else if (Integer.toString(int_number).length() == 2)
{
var_tens = var_temp.substring(var_temp.length() - 2);
var_huns = "0";
}
else if (Integer.toString(int_number).length() == 1)
{
var_tens = "0";
var_huns = "0";
}
String to_return = "";
switch (Integer.parseInt(var_huns)) {
case 0: to_return = tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 1: to_return = "C" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 2: to_return = "CC" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 3: to_return = "CCC" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 4: to_return = "CD" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 5: to_return = "D" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 6: to_return = "DC" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 7: to_return = "DCC" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 8: to_return = "DCCC" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
case 9: to_return = "CM" + tensToRomanNumerals(Integer.parseInt(var_tens));
break;
}
return to_return;
}
public static String tensToRomanNumerals(int int_number) {
String var_temp = Integer.toString(int_number);
String var_ones = "", var_tens = "";
if (Integer.toString(int_number).length() == 1)
{
var_ones = Integer.toString(int_number);
var_tens = "0";
}
else if (Integer.toString(int_number).length() == 2)
{
var_ones = var_temp.substring(var_temp.length() - 1);
var_tens = var_temp.substring(var_temp.length() - 2, var_temp.length() - 1);
}
String to_return = "";
switch (Integer.parseInt(var_tens)) {
case 0: to_return = onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 1: to_return = "X" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 2: to_return = "XX" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 3: to_return = "XXX" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 4: to_return = "XL" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 5: to_return = "L" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 6: to_return = "LX" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 7: to_return = "LXX" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 8: to_return = "LXXX" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
case 9: to_return = "XC" + onesToRomanNumerals(Integer.parseInt(var_ones));
break;
}
return to_return;
}
public static String onesToRomanNumerals(int int_number) {
String var_ones = Integer.toString(int_number);
var_ones = var_ones.substring(var_ones.length() - 1 );
String to_return = "";
switch (Integer.parseInt(var_ones)) {
case 0: to_return = "";
break;
case 1: to_return = "I";
break;
case 2: to_return = "II";
break;
case 3: to_return = "III";
break;
case 4: to_return = "IV";
break;
case 5: to_return = "V";
break;
case 6: to_return = "VI";
break;
case 7: to_return = "VII";
break;
case 8: to_return = "VIII";
break;
case 9: to_return = "IX";
break;
}
return to_return;
}
}
Lol at least I converted it to VB
j/k ;)
Not just that but at least yours converted the right way around ;)
:eek:
thanks man
i just hope someone else (Parksie maybe? :confused: ) can convert my example into C++
How do you handle the bar above M etc? :eek: :p
The bar above M ?
What ?
A bar on top multiplies by one thousand. eg M with bar on top is 1 million. I am not sure of all letters that allow bar on top.
Regards
Stuart
Eh I only thought the bar was a graphical thing.
Like you can draw I, II, III, IV, VI, VII, VIII and what not with a bar across the top to make it look nice :)
a very easy way is to use the function from excel
create a document with in cell b1 the function '=roman(a1)'
save this doc in 'c:\temp' with the name 'roman.xls'
then use this code
Code:Dim objExcel As Excel.Application
Dim objWorksheet As Excel.Worksheet
Set objExcel = New Application
objExcel.Visible = False
objExcel.Workbooks.Open "c:\temp\roman.xls"
Set objWorksheet = objExcel.ActiveSheet
objWorksheet.Range("a1").Value = Text1.Text
Text2.Text = objWorksheet.Range("b1").Value
objExcel.Workbooks(1).Close (False)
Set objWorksheet = Nothing
objExcel.Quit
Set objExcel = Nothing
Yes, yes.
plenderj, we have made more posts on this thread than the owner
I went to your website, yes it is short, but i like the picture
:p
Its short, but its fat !
You scroll across you see. I though there was lots of interesting info there.
AHHH...
I didn't know to scroll across...
That brings new light to your site
duh :)
:(