PDA

View Full Version : توابع تبدیل عدد صحیح به عدد رومی و بلعکس



Coder#
جمعه 25 مهر 1393, 02:10 صبح
دیدم بعضی از به اصطلاح برنامه نویسان، این دو تابع رو بی خودی پیچیده اش کردن، بنابراین تصمیم گرفتم تا دو نسخه بسیار ساده و خوانا ازشون بنویسم.

/* Integer to Roman Converter */
void dec2rom (unsigned long d)
{
while (d >= 1000)
printf ("M", d -= 1000);
while (d >= 900)
printf ("CM", d -= 900);
while (d >= 500)
printf ("D", d -= 500);
while (d >= 400)
printf ("CD", d -= 400);
while (d >= 100)
printf ("C", d -= 100);
while (d >= 90)
printf ("XC", d -= 90);
while (d >= 50)
printf ("L", d -= 50);
while (d >= 40)
printf ("XL", d -= 40);
while (d >= 10)
printf ("X", d -= 10);
if (d == 9)
printf ("IX", d -= 9);
if (d >= 5 && d <= 8)
printf ("V", d -= 5);
if (d == 4)
printf ("IV", d -= 4);
while (d >= 1 && d <= 3)
printf ("I", d -= 1);
}

/* Roman to Integer Converter */
int rom2dec (char str[])
{
unsigned long i, j, d, v[2];
for (d = i = 0; str[i] != '\0'; i++) {
for (v[0] = v[1] = j = 0; j <= 1; j++) {
if (str[i+j] == 'i' || str[i+j] == 'I')
v[j] = 1;
else if (str[i+j] == 'v' || str[i+j] == 'V')
v[j] = 5;
else if (str[i+j] == 'x' || str[i+j] == 'X')
v[j] = 10;
else if (str[i+j] == 'l' || str[i+j] == 'L')
v[j] = 50;
else if (str[i+j] == 'c' || str[i+j] == 'C')
v[j] = 100;
else if (str[i+j] == 'd' || str[i+j] == 'D')
v[j] = 500;
else if (str[i+j] == 'm' || str[i+j] == 'M')
v[j] = 1000;
else if (str[i+j])
return 0; /* برای خطا گیری */
}
if (v[0] < v[1]) {
d += (v[1] - v[0]);
i++;
}
else
d += v[0];
}
return d;
}

Coder#
شنبه 26 مهر 1393, 16:39 عصر
http://en.wikipedia.org/wiki/Roman_numerals

در این وبسایت می تونید اعداد صحیح رو به رومی تبدیل کنید و بلعکس.
http://www.tools4noobs.com/online_tools/roman_decimal/