Converting base 10 to Roman Numerals

  • Thread starter Thread starter C++ hates me
  • Start date Start date
  • Tags Tags
    Base
AI Thread Summary
The discussion focuses on converting a four-digit Arabic number to Roman numerals using C++. The user has found a code snippet but seeks clarification on specific lines to understand the logic behind them. Key points include the initialization of variables, the loop structure for processing the number, and the significance of the variable `p`, which represents the place value (hundreds, tens, units) during conversion. The user expresses a desire to learn the programming concepts rather than submit the code as their own work. Understanding these elements is crucial for mastering the conversion process in C++.
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 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 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.
 
I multiplied the values first without the error limit. Got 19.38. rounded it off to 2 significant figures since the given data has 2 significant figures. So = 19. For error I used the above formula. It comes out about 1.48. Now my question is. Should I write the answer as 19±1.5 (rounding 1.48 to 2 significant figures) OR should I write it as 19±1. So in short, should the error have same number of significant figures as the mean value or should it have the same number of decimal places as...
Thread 'A cylinder connected to a hanging mass'
Let's declare that for the cylinder, mass = M = 10 kg Radius = R = 4 m For the wall and the floor, Friction coeff = ##\mu## = 0.5 For the hanging mass, mass = m = 11 kg First, we divide the force according to their respective plane (x and y thing, correct me if I'm wrong) and according to which, cylinder or the hanging mass, they're working on. Force on the hanging mass $$mg - T = ma$$ Force(Cylinder) on y $$N_f + f_w - Mg = 0$$ Force(Cylinder) on x $$T + f_f - N_w = Ma$$ There's also...
Back
Top