freeCodeCamp/guide/arabic/certifications/javascript-algorithms-and-d.../javascript-algorithms-and-d.../roman-numeral-converter/index.md

12 KiB

title localeTitle
Roman Numeral Converter تحويل الأرقام الرومانية

:triangular_flag_on_post: تذكر استخدام Read-Search-Ask إذا واجهتك مشكلة. حاول إقران البرنامج :busts_in_silhouette: واكتب الكود الخاص بك :pencil:

:checkered_flag: شرح المشكلة:

ستقوم بإنشاء برنامج يقوم بتحويل عدد صحيح إلى عدد روماني.

روابط ذات صلة

:speech_balloon: تلميح: 1

إنشاء صفيفين ، واحد مع الأرقام الرومانية والآخر مع ما يعادل العشري للأشكال الجديدة سيكون مفيدا للغاية.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 2

إذا قمت بإضافة الأرقام إلى الصفائف التي تمر قبل تقديم الحرف الجديد ، مثل القيم لـ 4 و 9 و 40 ، فسيوفر لك الكثير من التعليمات البرمجية.

حاول أن تحل المشكلة الآن

:speech_balloon: تلميح: 3

لا يمكنك الحصول على أكثر من ثلاثة أرقام رومانية متتالية معًا.

حاول أن تحل المشكلة الآن

تنبيه المفسد!

علامة تحذير

الحل في المستقبل!

:beginner: الحل الأساسي للكود:

`var convertToRoman = function(num) {

var decimalValue = [ 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 ]; var romanNumeral = [ 'M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I' ];

var romanized = '';

for (var index = 0; index < decimalValue.length; index++) { while (decimalValue[index] <= num) { romanized += romanNumeral[index]; num -= decimalValue[index]; } }

return romanized; }

// test here convertToRoman(36); `

:rocket: تشغيل الكود

شرح الشفرة:

  • نبدأ من خلال إنشاء صفيفين مع التحويل الافتراضي مع مؤشرات مطابقة. هذه تسمى decimalValue و romanNumeral . نحن أيضا إنشاء متغير سلسلة فارغة ، romanized ، والتي سوف تستضيف الرقم الروماني النهائي.
  • باستخدام حلقة for ، نقوم بالمرور من خلال decimalValue صفيف decimalValue . نستمر في التكرار حتى يتم احتواء القيمة الموجودة في index الحالي على num .
  • بعد ذلك، أضفنا رومانية وانخفاض num بما يعادل عشري.
  • وأخيرًا ، نعيد قيمة romanized .

روابط ذات صلة

:sunflower: حل الشفرة المتوسطة:

`function convertToRoman(num) { var romans = ["I", "V", "X", "L", "C", "D", "M"], ints = [], romanNumber = [], numeral = ""; while (num) { ints.push(num % 10); num = Math.floor(num/10); } for (i=0; i<ints.length; i++){ units(ints[i]); } function units(){ numeral = romans[i2]; switch(ints[i]) { case 1: romanNumber.push(numeral); break; case 2: romanNumber.push(numeral.concat(numeral)); break; case 3: romanNumber.push(numeral.concat(numeral).concat(numeral)); break; case 4: romanNumber.push(numeral.concat(romans[(i2)+1])); break; case 5: romanNumber.push(romans[(i2)+1]); break; case 6: romanNumber.push(romans[(i2)+1].concat(numeral)); break; case 7: romanNumber.push(romans[(i2)+1].concat(numeral).concat(numeral)); break; case 8: romanNumber.push(romans[(i2)+1].concat(numeral).concat(numeral).concat(numeral)); break; case 9: romanNumber.push(romans[i2].concat(romans[(i2)+2])); } } return romanNumber.reverse().join("").toString(); }

// test here convertToRoman(97); `

:rocket: تشغيل الكود

شرح الشفرة:

  • إنشاء مجموعة من الأرقام الرومانية ( romans ).
  • استخدم حلقة for لإنشاء صفيف من الأرقام ( ints ) في الرقم.
  • قم بالالتفاف عبر صفيف الأرقام (القاعدة 10) وكما تفعل ، قم بزيادة الرقم الروماني (الأساس 5) بمقدار 2 ( numeral = romans[i*2] ).
  • داخل الحلقة ، استخدم Switch Case لضغط الأرقام الرومانية الصحيحة (إلى الخلف) على هذا الصفيف.
  • عكس مجموعة الأرقام الرومانية وتحويلها إلى سلسلة.

روابط ذات صلة

:sunflower: حل الشفرة المتوسطة:

`function convertToRoman(num) { var romans = // 10^i 10^i*5 ["I", "V"], // 10^0 ["X", "L"], // 10^1 ["C", "D"], // 10^2 ["M"] // 10^3 ], digits = num.toString() .split('') .reverse() .map(function(item, index) { return parseInt(item); }), numeral = "";

// Loop through each digit, starting with the ones place for (var i=0; i<digits.length; i++) { // Make a Roman numeral that ignores 5-multiples and shortening rules numeral = romans[i][0].repeat(digits[i]) + numeral; // Check for a Roman numeral 5-multiple version if (romans[i][1]) { numeral = numeral // Change occurrences of 5 * 10^i to the corresponding 5-multiple Roman numeral .replace(romans[i][0].repeat(5), romans[i][1]) // Shorten occurrences of 9 * 10^i .replace(romans[i][1] + romans[i][0].repeat(4), romans[i][0] + romans[i+1][0]) // Shorten occurrences of 4 * 10^i .replace(romans[i][0].repeat(4), romans[i][0] + romans[i][1]); } }

return numeral; }

// test here convertToRoman(36); `

:rocket: تشغيل الكود

شرح الشفرة:

  • استخدم مصفوفة ( romans ) لإنشاء مصفوفة تحتوي على الأرقام الرومانية لقوة معينة من 10 ، وإذا أمكن ، فإن الرقم الروماني لهذه القوة من 10 مرات 5.
  • قم بتحويل رقم الإدخال ( num ) إلى مصفوفة عكسية من الأرقام ( digits ) حتى يتسنى لنا إجراء التكرار خلال هذه الأرقام بدءًا من الموضع والصعود.
  • قم بالالتفاف من خلال كل رقم ، بدءاً بالمكان ، وإنشاء سلسلة أرقام رومانية بإضافة كل عدد روماني ذو طاقة أعلى إلى بداية سلسلة numeral عددًا من المرات يساوي digit . يتجاهل هذا السطر الأولي الأرقام الرومانية التي هي قوة 10 مرات 5 ويتجاهل أيضًا قواعد تقصير.
  • إذا كانت القدرة ذات الصلة 10 تحتوي على عدد روماني 5-متعددة ، بأرقام ، numeral 5-في-صف مع الأرقام الرومانية 5-متعددة ذات الصلة (أي V ، L ، أو D) وتقصير حدوث 9 * 10 ^ i (على سبيل المثال ، VIIII إلى VIX) و 4 * 10 ^ i (على سبيل المثال ، XXXX إلى XL). النظام مهم هنا!
  • وأخيرا ، عودة numeral .

روابط ذات صلة

:clipboard: ملاحظات للمساهمات:

  • :warning: لا تقم بإضافة حلول مشابهة لأي حلول موجودة. إذا كنت تعتقد أنها مشابهة ولكن أفضل ، فحاول دمج (أو استبدال) الحل المشابه الموجود.
  • أضف شرحًا لحلك.
  • تصنيف الحل في واحدة من الفئات التالية - الأساسي والمتوسط والمتقدم . :traffic_light:
  • الرجاء إضافة اسم المستخدم الخاص بك فقط إذا قمت بإضافة أي محتويات رئيسية ذات صلة . ( :warning: لا تزيل أي أسماء مستخدمين حالية )

نرى :point_right: Wiki Challenge Solution Template كمرجع.