# Homework Help: Converting base 10 to Roman Numerals

1. Apr 15, 2010

### C++ hates me

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.)

#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

 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. Apr 15, 2010

### DaveC426913

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
3. Apr 16, 2010

### C++ hates me

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.

4. Apr 16, 2010

### DaveC426913

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.