Problem Explanation:
Roman numbers are represented by below characters:
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
IV 4
IX 9
XL 40
XC 100
CD 400
CM 900
Example:
Input: 3
Output: "III"
Input: 58
Output: "LVIII"
Problem Solution:
This problem can be solved in many ways. The simplest solution is that is there below. We shall check with the highest base, take the corresponding Roman sign and subtract that base from the number. We shall continue the same steps till we convert the whole digit into decimal.
For example, if we need to convert the number 1234 into roman below are the steps:
Pass 1:
Number 1234 > 1000, hence we take 1000 as base.
Hence, 1234 – 1000, 1000 is “M” hence shall be written in “Roman Array”
Roman Array = M
Number = 234
Pass 2:
Number 234 > 100, hence we take 100 as base.
Hence, 234 – 100, 100 is “C” hence shall be written in “Roman Array”
Roman Array = MC
Number = 134
Pass 3:
Number 134 > 100, hence we take 100 as base.
Hence, 134 – 100, 100 is “C” hence shall be written in “Roman Array”
Roman Array = MCC
Number = 34
Pass 4:
Number 34 > 10, hence we take 10 as base.
Hence, 34 – 10, 10 is “X” hence shall be written in “Roman Array”
Roman Array = MCCX
Number = 24
Pass 5:
Number 24 > 10, hence we take 10 as base.
Hence, 24 – 10, 10 is “X” hence shall be written in “Roman Array”
Roman Array = MCCXX
Number = 14
Pass 6:
Number 14 > 10, hence we take 10 as base.
Hence, 14 – 10, 10 is “X” hence shall be written in “Roman Array”
Roman Array = MCCXXX
Number = 4
Pass 7:
Number 4, we have saved a static value.
Hence, 4 is “IV” hence shall be written in “Roman Array”
Roman Array = MCCXXXIV
Solution in C:
#include <stdio.h>
int main ()
{
int num;
printf("Enter the number:");
scanf("%d", &num);
printf("Roman Number is: ");
while (num > 0)
{
if (num >= 1000)
{
/* M - 1000 */
printf("M");
num = num - 1000;
}
else if (num >= 500)
{
/*
* D is 500. CM is 900
* CM = M - C = 1000 - 100 => 900
*/
if (num >= 900)
{
printf("CM");
num = num - 900;
}
else
{
printf("D");
num = num - 500;
}
}
else if (num >= 100)
{
/*
* C is 100. CD is 400
* CD = D - C = 500 - 100 => 400
*/
if (num >= 400)
{
printf("CD");
num = num - 400;
}
else
{
printf("C");
num = num - 100;
}
}
else if (num >= 50)
{
/*
* L is 50. XC is 90
* XC = C - X = 100 - 10 => 90
*/
if (num >= 90)
{
printf("XC");
num = num - 90;
}
else
{
printf("L");
num = num - 50;
}
}
else if (num >= 9)
{
/*
* XL is 40. IX is 9. X is 10
* XL = L - X = 50 - 10 = 40
* IX = X - I = 10 - 1 = 9
*/
if (num >= 40)
{
printf("XL");
num = num - 40;
}
else if (num == 9)
{
printf("IX");
num = num - 9;
}
else
{
printf("X");
num = num - 10;
}
}
else if (num >= 4)
{
/*
* V is 5 and IV is 4
* IV = V - I = 5 - 1 => 4
*/
if (num >= 5)
{
printf("V");
num = num - 5;
}
else
{
printf("IV");
num = num - 4;
}
}
else
{
printf("I");
num = num - 1;
}
}
printf("\n");
}
Output:
Enter the number:1234
Roman Number is: MCCXXXIV