إجراء عمليات حسابية على أعداد ضخمة تتكون من أكثر من 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;}