Новый комментарий

Pavel.Ivatsko 03.12.2018 в 00:29
function bigSum(string $x1, string $x2): string {
    $result = bcadd($x1,$x2);
    return $result;
}
ivashkevich 03.12.2018 в 10:07

Ну, чёт не. Нужно написать функцию самостоятельно. Вы же просто обернули готовую в другое имя. И непонятно, для чего переменная $result. Можно было просто:

return bcadd($x1, $x2).
SBTesla 03.12.2018 в 00:45
$a = '52343245623456243574657436754356754367';
$b = '79687945834597259348572398562395826735209';

function sum ($a, $b)
{
     $c = bcadd($a,$b);
     return $c;
}

$c = sum($a, $b);
echo $c;
ivashkevich 03.12.2018 в 10:08

Смотри коммент выше.

virtual2018 03.12.2018 в 10:23

код страшненький, но рабочий

function sumBigNumber($bigNumFirst, $bigNumSecond)
{
    $sumBigNum = "";
    $indexFirstNumber = strlen($bigNumFirst) - 1;
    $indexSecondNumber = strlen($bigNumSecond) - 1;
    $indexSum = $transferNum = 0;

    while ($indexFirstNumber >= 0 || $indexSecondNumber >= 0) {
        if ($indexFirstNumber < 0) {
            $sumTemp = (int)($bigNumSecond[$indexSecondNumber] + $transferNum);
        } elseif ($indexSecondNumber < 0) {
            $sumTemp = (int)($bigNumFirst[$indexFirstNumber] + $transferNum);
        } else {
            $sumTemp = (int)($bigNumFirst[$indexFirstNumber] + $bigNumSecond[$indexSecondNumber] + $transferNum);
        }

        if ($sumTemp >= 10) {
            $transferNum = 1;
            $sumTemp = $sumTemp - 10;
        } else {
            $transferNum = 0;
        }
        $sumBigNum[$indexSum] = $sumTemp;
        $indexFirstNumber--;
        $indexSecondNumber--;
        $indexSum++;
    }

    return strrev($sumBigNum);
}
EWA 03.12.2018 в 21:26
<?php
function bigSum(string $x1, string $x2): string
{
    $arrX1 = str_split($x1);
    $arrX2 = str_split($x2);
    if (count($arrX1) >= count($arrX2)){
        $i = count($arrX1);
    }else{
        $i = count($arrX2);
    }
    $n = 0;
    $arrayResult = [];
    for($x = 0; $x < $i; $x++){
        $result = array_pop($arrX1) + array_pop($arrX2) + $n;
        $str = (string)$result;
        if($result >= 10){
            $n = 1;
        }else{
            $n = 0;
        }
        array_unshift($arrayResult, $str[$n]);
    }
    if($n == 1){
        array_unshift($arrayResult, $n);
    }
        return implode($arrayResult);
}
echo bigSum('311564432977632588977129875641230255', '2589745632159875325874103698878965421036589');
?>
Evgeniy 04.12.2018 в 19:32
<?php

function bigSum(string $x1, string $x2): string
{
    if (empty($x1) || empty($x2)) {
        return $x1 . $x2;
    }

    $len1 = strlen($x1);
    $len2 = strlen($x2);
    $maxLen = max($len1, $len2);

    $carryBit = 0;
    $result = '';

    for ($i = 1; $i <= $maxLen; $i++) {
        ($i > $len1) ? ($digit1 = 0) : ($digit1 = (int)$x1[$len1 - $i]);
        ($i > $len2) ? ($digit2 = 0) : ($digit2 = (int)$x2[$len2 - $i]);
        $sum = (string)($digit1 + $digit2 + $carryBit);
        $result = $sum[strlen($sum) - 1] . $result;
        (strlen($sum) > 1) ? ($carryBit = 1) : ($carryBit = 0);
    }

    return ($carryBit > 0) ? ('1' . $result) : ($result);
}

/*---------------------------------------------*/

$a = '10000000000000000000033';
$b = '500000000098';

echo "Складываем $a и $b <br>" . 'Результат = ' . bigSum($a, $b);
Evgeniy 05.12.2018 в 03:00

Оффтоп :)
Библиотека для сложения двух чисел с использованием ООП:
https://habr.com/post/172119/
:)

SIGTTD 03.01.2019 в 13:00
function bigSum(string $x1, string $x2): string {
    $maxLength = strlen($x1) > strlen($x2) ? strlen($x1) : strlen($x2);
    $x1rev = strrev($x1);
    $x2rev = strrev($x2);
    $resultRev = '';
    $decimalPlus = 0;
    for ($i = 0; $i < $maxLength; $i++) {
        if ($x1rev[$i] + $x2rev[$i] + $decimalPlus > 9) {
            $resultRev .= $x1rev[$i] + $x2rev[$i] - 10 + $decimalPlus;
            $decimalPlus = 1;
        } else {
            $resultRev .= $x1rev[$i] + $x2rev[$i] + $decimalPlus;
            $decimalPlus = 0;
        }
    }
    return strrev($resultRev);
}
echo bigSum('278378473848374873847384738478347483743878', '23784923428346283472346234623746238423');
Floppy 31.05.2020 в 16:49

В примере есть ошибка и в примерах в комментариях тоже. При попытке сложить 99 + 1 получается 00 потому что забываем добавить $temp к результату если он больше 0.

$input = '9999 1';

[$varA, $varB] = explode(' ', $input);

$varA = trim($varA);
$varB = trim($varB);

$maxLen = max(strlen($varA), strlen($varB));
$varA = str_pad($varA, $maxLen, '0', 0);
$varB = str_pad($varB, $maxLen, '0', 0);

echo $varA . PHP_EOL;
echo $varB . PHP_EOL;

$result = '';
$inMind = 0;
$debug = true;
for ($i = $maxLen - 1; $i >= 0; $i--) {
    $x1 = (int)$varA[$i];
    $x2 = (int)$varB[$i];

    $sum = $x1 + $x2;
    $sumFinal = $sum + $inMind;

    if ($sumFinal > 9) {
        $inMind = 1;
        $sumFinal %= 10;
    }else{
        $inMind = 0;
    }

    if ($debug){
        printf('%d + %d = %d (в уме %d) пишем %d' . PHP_EOL, $x1, $x2, $sum, $inMind, $sumFinal);
    }
    $result = $sumFinal . $result;
}
if ($inMind>0){
    $result = $inMind . $result;
}
ivashkevich 01.06.2020 в 07:46

Спасибо, указал ссылку на ваше решение в уроке.

Логические задачи с собеседований