1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Roman no.system to Decimal no. system converting

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

  1. inspiration

    inspiration New Member

    Joined:
    Feb 15, 2010
    Messages:
    85
    Likes Received:
    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. meyup

    meyup New Member

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

    Code:
    Code:
    char numerals[80];
    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 {
    			// just add the value
    		}
    	}
    	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. techme

    techme New Member

    Joined:
    Feb 15, 2010
    Messages:
    86
    Likes Received:
    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[1024];
      int bufLength;
      if(scanf("%1023s%n", buf, &bufLength)) {
        printf("Your string has a length of %d\n", bufLength);
      }
    }
     

Share This Page