إجراء عمليات حسابية على أعداد ضخمة تتكون من أكثر من 30 رقم

  • MAXIDROL

السلام عليكم...

في لغة php او اي لغة برمجة...كيف يمكنني أن اجري عمليات حسابية على أعداد كبيرة جدا (تتكون من اكثر من 30 رقم) ؟

حاولت إنشاء دالة للقيام بجمع اعداد بإستخدام طريقة الجمع العمودي وتخزين النتيجة كنص عوض رقم... ولكنها أحيانا لا تعطي نتائج صحيحة !!!

<?php

echo add ('1111111111111111111111111111111111111111111111111111119', '5');

function add ($x, $y) {
    $a = strlen ($x);
    $b = strlen ($y);
    $l = abs ($a - $b);
    $c = max ($a, $b) - 1;
    $u = 0;
    $r = '';

    if ($a > $b) $y = str_repeat ('0', $l) . $y;
    if ($b > $a) $x = str_repeat ('0', $l) . $x;

    while ($c != 0) {
        $d = $x[$c] + $y[$c];

        if ($d >= 10) {
            $r .= ($d % 10) + $u;
            $u = ($d / 10) % 10;
        } else {
            $r .= $d + $u;
            $u = 0;
        }

        $c--;
    }

    $r .= strrev ($x[0] + $y[0] + $u);
    return strrev ($r);
}
يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

اهلا, نسيت شئ بسيطا فقط

لم يمكن يعمل على المثال 109 ةو 99

في كل الحالات يمكنك البخث هنا

تم تصحيح الكود...واصبح يعمل على كل الأعداد مهما كان حجمها ..شكرا على كل حال

$x = '52941694929601054559870185294169492960105455987018';
$y = '52941694929601054559870185294169492960105455987018';
echo add ($x, $y);

function add ($x, $y) {
    $a = strlen ($x);
    $b = strlen ($y);
    $l = abs ($a - $b);
    $c = max ($a, $b) - 1;
    $u = 0;
    $r = '';

    if ($a > $b) $y = str_repeat ('0', $l) . $y;
    if ($b > $a) $x = str_repeat ('0', $l) . $x;

    while ($c != 0) {
        $d = intchar2int ($x[$c]) + intchar2int ($y[$c]) + $u;

        if ($d >= 10) {
            $r .= ($d % 10);
            $u = ($d / 10) % 10;
        } else {
            $r .= $d;
            $u = 0;
        }

        $c--;
    }

    $r .= strrev ($x[0] + $y[0] + $u);
    return strrev ($r);
}

function intchar2int ($c) {return ord ($c) - 0x30;}

لو لغة البرمجة ليست شرط استخدم روبى ففيها إمكانية لإستخدام أرقام بحجم أكبر مما تتخيل مثلا 9 أس 999

9 ^ 999 يعطيك نتيجة رقم مكون من أكثر من 21 خانة