# Roman no.system to Decimal no. system converting

Discussion in 'C' started by inspiration, Apr 13, 2010.

1. ### inspirationNew Member

Joined:
Feb 15, 2010
Messages:
85
0
Trophy Points:
0
Can anyone give me somewhere to start if
I have to convert from Roman Numeral to decimals?

M - 1000
D - 500
C - 100
L - 50
X - 10
V - 5
I - 1

that if the user inputs CD - 400
MD - 1500
IX - 9
MXIII - 1013

I just need a rough guide on how to do this.
All I know is if the digit's value before is smaller, then subtracts and if not, just keep adding. any example would help me greatly. thanks.

PS: how do I also make the scanf determine the number of letters input?

2. ### meyupNew Member

Joined:
Feb 15, 2010
Messages:
102
0
Trophy Points:
0
This might work. It isn't complete by any means, but is a general approach.

Code:
Code:
```char numerals;
int numeralCount,i;
int firstValue,secondValue;
scanf("%s",numerals);
printf("You entered: %s\n",numerals);
numeralCount = strlen(numerals);
for (i = 0; i < numeralCount; i++) {
printf("%c\n",numerals[i]);
if (i != (numeralCount - 1)) {   // not on last character
firstValue = getValue(numerals[i]);    // return 1000 for 'M', etc....
secondValue = getValue(numerals[i+1]);
if (firstValue < secondValue) {
// do your 'less than' magic
i++;   // 'consume' the second char, since you want to step over it next time
}
else {
}
}
else {   // on last character
// to get here, must need to add final char value
}
}```
note that when you have a 'less than' case, like IV, you want the next time thru the loop to skip to the character after the V. That's what the i++ 'consume' is for.

You'd have a 'finalValue' variable or some such that got added to each time thru the loop, and at the end would be your final result.

-------
Beginner Computer Programming
teaching programming to beginners using C

3. ### techmeNew Member

Joined:
Feb 15, 2010
Messages:
86
0
Trophy Points:
0
Use strlen on the string, or some loop like this:
Code:
Code:
```char ch;
while (scanf("%c",&ch)) {
[ verfify ch ]
[ add value to total ] // see note below
}```
Or scanf's %n modifier, like this:
Code:
Code:
```#include <stdio.h>

int main()
{
char buf;
int bufLength;
if(scanf("%1023s%n", buf, &bufLength)) {
printf("Your string has a length of %d\n", bufLength);
}
}```