اذهب إلى المحتوى

السؤال

نشر (معدل)
package Java;

import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
   Scanner in =new Scanner(System.in);

   System.out.println("  ادخل الرقم الروماني");
   
   String x=in.next();
   
   System.out.printf("Roman= %S",x);
}

 

تم التعديل في بواسطة Wael Aljamal
توضيح السؤال

Recommended Posts

  • 0
نشر

الرقم الروماني لايمكن تخزينه كرقم int ضمن البرنامج، لأنه على شكل رموز ونظام عد مختلف، نخزنه على شكل سلسلة نصية

أولا علينا عمل دالة تستقبل الرمز الروماني وتعيد مقابله الرقم العشري الموافق لقيمته..

هذه الدالة تستقبل محرف وسيط و تعيد قيمة رقمية موافقة لها..

int value(char r)
    {
        if (r == 'I')
            return 1;
        if (r == 'V')
            return 5;
        if (r == 'X')
            return 10;
        if (r == 'L')
            return 50;
        if (r == 'C')
            return 100;
        if (r == 'D')
            return 500;
        if (r == 'M')
            return 1000;
        return -1;
    }

ثم علينا تعريف دالة تقوم بالمرور على سلسلة الرقم الروماني وحساب قيمته عن طريق تعويض كل رمز بالقيمة الموافقة له و إجراء العملية الرياضية المناسبة:

int romanToDecimal(String str)
    {
        // تهيئة الناتج
        int res = 0;
 
        for (int i = 0; i < str.length(); i++)  // المرور على النص بحلقة
        {
            // قراءة قيمة الرمز الحالي
            int s1 = value(str.charAt(i));
 
            // قراءة الرمز اللاحق
            if (i + 1 < str.length())
            {
                int s2 = value(str.charAt(i + 1));
 
                // مقارنة الرمزين
                if (s1 >= s2)
                {
                    // نقوم بجمع القيمتين إن كان الحالي أكبر من التالي
                    res = res + s1;
                }
                else
                {
                    // نقوم بالطرح
                    res = res + s2 - s1;
                    i++;
                }
            }
            else {
                res = res + s1;
            }
        }
 
        return res;
    }

وفي الشيفرة لديك، نطبق الدالة على المتغير X والذي هو سلسلة نصية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...