السلام عليكم...
في لغة 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);
}
التعليق السابق
تم تصحيح الكود...واصبح يعمل على كل الأعداد مهما كان حجمها ..شكرا على كل حال
$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;}
التعليقات