Converting base 10 to Roman Numerals

  • Thread starter Thread starter C++ hates me
  • Start date Start date
  • Tags Tags
    Base
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
3 replies · 4K views
C++ hates me
Messages
2
Reaction score
0
Hello Physics Forums,

Before i get started asking questions i wanted to clarify that i don't 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.

Homework Statement



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 count << "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 count << l[0];
10 for (int i=1; i<4; i++,p/=10)
11 {
12 for(; r >= p*d[0]; r -= p*d[0])
13 count << l[2*i] << l[i*2-2];
14 for(; r >= p*d[1]; r -= p*d[1])
15 count << l[2*i-1];
16 for(; r >= p*d[2]; r -= p*d[2])
17 count << l[2*i]<<l[i*2-1];
18 for(; r >= p; r -= p)
19 count << l[2*i];
}
count << "\n\nEnter the next number, or -1 to quit:\n";
cin >> r;
} while (r>=0);

count << "\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 don't want to turn it in and get a good grade because it isn't 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 anyone 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:
Physics news on Phys.org
Run through the above program manually - on paper. Every time a variable is defined, write it down and put its value in.
 
Last edited:
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 don't really understand and i take it, its pretty important.
 
C++ hates me said:
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 don't really understand and i take it, its pretty important.
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.