Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

Homework Help: Converting base 10 to Roman Numerals

  1. Apr 15, 2010 #1
    Hello Physics Forums,

    Before i get started asking questions i wanted to clarify that i dont need/want a answer, i have an answer after about an hour of searching.

    The thing is i understand what needs to be done but i do not understand how to do it in C++.
    I am just hoping to learn from you guys.


    1. The problem statement, all variables and given/known data

    The problem is: I must write a program in C++ that converts a 4 digit arabic number into roman numerals. I must have a loop that allows the user to repeat the calc. however many times they wish ( I already know how.)

    The answer that i found was this:

    #include <stdafx.h>
    #include <iostream>
    using namespace std;
    int main()
    {
    1 char l[] = "MDCLXVI";
    2 int r,d[]={9,5,4,1};

    3 cout << "Enter a positive integer to convert to Roman numerals:\n";
    4 cin >> r;

    5 do
    6 {
    7 int p=100;
    8 for(; r>=1000; r-=1000)
    9 cout << l[0];
    10 for (int i=1; i<4; i++,p/=10)
    11 {
    12 for(; r >= p*d[0]; r -= p*d[0])
    13 cout << l[2*i] << l[i*2-2];
    14 for(; r >= p*d[1]; r -= p*d[1])
    15 cout << l[2*i-1];
    16 for(; r >= p*d[2]; r -= p*d[2])
    17 cout << l[2*i]<<l[i*2-1];
    18 for(; r >= p; r -= p)
    19 cout << l[2*i];
    }
    cout << "\n\nEnter the next number, or -1 to quit:\n";
    cin >> r;
    } while (r>=0);

    cout << "\n\nHave a nice day.";

    return 0;
    }

    **I give all credit to the user gnome for the above program, i merely copied it :(**

    The problem is i dont want to turn it in and get a good grade because it isnt my work.
    I really want to be able to do it on my own, i just do not understand C++ well enough to write this program.
    Can any one explain to me in ordinary terms what the following lines of code are doing:
    1, 2, 7, 8, 10, 12-19 :)

    Thank you all for your guidance and patience.
    Sean

    [edit] I see now that i posted in introductory physics, if an admin could move it to computer sci, engineering boards i would appreciate it!
     
    Last edited: Apr 15, 2010
  2. jcsd
  3. Apr 15, 2010 #2

    DaveC426913

    User Avatar
    Gold Member

    Run through the above program manually - on paper. Every time a variable is defined, write it down and put its value in.
     
    Last edited: Apr 15, 2010
  4. Apr 16, 2010 #3
    Ok i will do that. In line 7 when he sets the int p value = to 100 why does he do it? Does it help convert from base 10 to roman numerals?
    Line 10 is the one i dont really understand and i take it, its pretty important.
     
  5. Apr 16, 2010 #4

    DaveC426913

    User Avatar
    Gold Member

    It is a counter for digit placeholders. It starts off at 100, then in line 10, where the i loop increments, it is divided by 10. So:
    when i=1, p=100
    when i=2, p=10
    when i=3, p=1
    when i=4, the loop exits

    Presumably, it is going through the 100's column, then the 10's column, then the 1's column.
     
Share this great discussion with others via Reddit, Google+, Twitter, or Facebook