الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ضرب رقمين كبيرين

بدأه The.Eagle في 19 أبريل 2012 · 5 رد · 653 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

مشكلة واجهتني أثنـاء ضرب رقمين كبيرة

طبعا int و double لاتكفي للناتج لأنه سيكون كبير جداً

خزنت الرقمين في String ثم أريد أن يعمل call للميثود mul إلى أن يكون طول String أقل من 2 ويضرب الرقمين

ثم يعيدهم في String مرة أخرى

لدي مشكلة في فهم الـ Recursion وتطبيقه على هذا المثال

طبعا بعد ما يخزن كل رقم ناتج من عملية الضرب المفترض أجمع كل خانـة

هذا القانون :

اقتباس
A * B = A0 * B0·10n + (A0* B1 + A1 * B0) ·10n/2 + A1* B1

هذي محاولتــي :

 public class multip {
static String  a0, a1, b0, b1;


    public static String mult(String number1, String number2)
    {

        if (number1.length() < 3)
        {
            int x = Integer.parseInt(number1);
            int y = Integer.parseInt(number2);
            return x * y  +"";
        }
        a0 = number1.substring(0, (number1.length() / 2));  
        a1 = number1.substring((number1.length() / 2), number1.length());
        b0 = number2.substring(0, (number2.length() / 2));  
        b1 = number2.substring((number2.length() / 2), number2.length());

        return mult(a1,b0)+mult(a0,b1);
    }

    public static void main(String[] args)
    {
        String number1, number2;
        String zero = "0";
        int length;
        number1 = JOptionPane.showInputDialog("Enter First number : ");
        number2 = JOptionPane.showInputDialog("Enter second number : ");

        if (number1.length() > number2.length()) {
            length = number1.length() - number2.length();

            for (int i = 0; i < length; i++) {
                number2 = zero + number2;
            }
        } else if (number2.length() > number1.length()) {
            length = number2.length() - number1.length();

            for (int i = 0; i < length; i++) {
                number1 = zero + number1;
            }
        }
        JOptionPane.showMessageDialog(null, number1 + "\n" + number2);
        String result = mult(number1, number2);
        System.out.println(result);
    }
}
#2

إذا كنت تريد أن تضرب الرقمين لتقوم بعمل شيء آخر

استخد BigInteger أو BigDecimal وينتهي الموضوع

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

هل يوجد حل آخر بالطريقة التي طلبتها :happy:

#4

أخي في الشيفرة لديك مشكة في الحمل ما بين عمليات الضرب الصغيرة

في معادلتك ماهو n؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5
علاء الصالحي كتب:

أخي في الشيفرة لديك مشكة في الحمل ما بين عمليات الضرب الصغيرة

في معادلتك ماهو n؟

تحياتي

.

يا عزيزي الـ n هو length

يبدو أنني أخطأت في كتابة المعادلة

هذه المعادلة بعد التصحيح

اقتباس
A * B = A0 * B0·10^n + (A0* B1 + A1 * B0) ·10^n/2 + A1* B1

وشكرا ً :)

#6

كما أخبرتك لديك مشكلة في الحمل ما بين عمليات الضرب الصغيرة

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة