Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2014, 19:30   #11
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Судя по входным данным и результатам, "столбик" начинает суммировать, не "справа", как должно быть, а "слева". Что не удивительно, потому, что обход обоих массивов в функции идёт именно "слева".
Поэтому, в соответствии с математическим описанием алгоритма сложения в столбик, необходимо внести в функцию соответствующие исправления.
А сами?! Простите, я искренне не хочу Вас обидеть, но это уже перебор!
До этой цитаты, Вы пишите всё более-менее нормально. Но, потом в открытую просите халявы. Описание сложения и вычитания в столбик, есть не только в сети. Математическое описание алгоритма даётся в учебниках для начальной школы.
Что говорить, Вы даже поверхностно не проанализировали результаты работы своего алгоритма! Так дело не пойдёт!
Сделайте сами. Здесь, на форуме,помогают советами тем, кто сам что-то делает, или хотя бы пытается делать.
Простите, я искренне не хотел, Вас обидеть, но это с Вашей стороны действительно перебор!
Я не обижаюсь но вроде бы с утра такой цикл делает как раз обход справа:
PHP код:
for ($i $maxNumCount-1$i >=0$i--) 
тоесть с конца строки...
Tyoma5891 вне форума Ответить с цитированием
Старый 12.02.2014, 19:39   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Не вникал особо. Имхо:
Код:
$num1t = ($num1Count > $i) ? $num1[$i] : 0; 
$num2t = ($num2Count > $i) ? $num2[$i] : 0;
Благодаря этому куску кода "699" и "1" превращаются в "699" и "100" (на недостающих позициях добавляются нули).

UPD
Код:
    $num1Count = strlen($num1) - 1; 
    $num2Count = strlen($num2) - 1; 
    $maxNumCount = max($num1Count, $num2Count); 
     
    for ($i = $maxNumCount; $i >= 0; $i--, $num1Count--, $num2Count--) 
    { 
        $num1t = ($num1Count >= 0) ? $num1[$num1Count] : 0; 
        $num2t = ($num2Count >= 0) ? $num2[$num2Count] : 0;
Может быть, можно все решить красивее.
Streletz, извините, что мешаю воспитательной деятельности.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 12.02.2014 в 19:53.
BDA вне форума Ответить с цитированием
Старый 12.02.2014, 19:49   #13
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

BDA, об этом, по сути, я и говорил ТС несколькими постами выше.
Tyoma5891,
Цитата:
но вроде бы с утра такой цикл делает как раз обход справа
Что называется, удивительное рядом...
Хотя, в данном случае, чудеса крайне маловероятны.
В своём цикле Вы поменяли логику работы на противоположную той, что была в статье. А присвоения переменных
Код:
$num1t = ($num1Count > $i) ? $num1[$i] : 0; 
$num2t = ($num2Count > $i) ? $num2[$i] : 0;
оставили такими же, что и в статье. Поэтому алгоритм работает неверно. Исправляйте.
UPD
BDA,
Цитата:
Streletz, извините, что мешаю воспитательной деятельности.
Пожалуйста! Без проблем!
Главное, чтобы ТС, получив готовое решение, в нём разобрался. Но, это уже будет целиком и полностью на его совести.

Последний раз редактировалось Streletz; 12.02.2014 в 20:55.
Streletz вне форума Ответить с цитированием
Старый 12.02.2014, 21:05   #14
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
В своём цикле Вы поменяли логику работы на противоположную той, что была в статье. А присвоения переменных
Код:
$num1t = ($num1Count > $i) ? $num1[$i] : 0; 
$num2t = ($num2Count > $i) ? $num2[$i] : 0;
оставили такими же, что и в статье. Поэтому алгоритм работает неверно. Исправляйте.
А Вы вообще проверяли алгоритм предложенный на том сайте, он неверно работает))) даже если в правильном направлении идти в цикле как там 1 в 1 так же делает как писал BDA:
Не вникал особо. Имхо:
Код:

$num1t = ($num1Count > $i) ? $num1[$i] : 0;
$num2t = ($num2Count > $i) ? $num2[$i] : 0;

Благодаря этому куску кода "699" и "1" превращаются в "699" и "100" (на недостающих позициях добавляются нули).
также происходит все...
Tyoma5891 вне форума Ответить с цитированием
Старый 12.02.2014, 21:35   #15
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Tyoma5891, моя интуиция подсказывает, что Вы пропустили очень важные слова из статьи с сайта. Там числа хранятся от младших разрядов к старшим, а в Вашей реализации наоборот.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.02.2014, 23:25   #16
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Tyoma5891, моя интуиция подсказывает, что Вы пропустили очень важные слова из статьи с сайта. Там числа хранятся от младших разрядов к старшим, а в Вашей реализации наоборот.
да точно, но тот вариант что Вы предложили тоже не рабочий...
при сложении 9 и 1 выдает 0, при сложении 99 и 1 выдает 00, и так далее
Tyoma5891 вне форума Ответить с цитированием
Старый 12.02.2014, 23:48   #17
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
function sum($num1, $num2)  
{ 
    $result = ""; 
    $flag = 0; 
    $num1Count = strlen($num1) - 1; 
    $num2Count = strlen($num2) - 1; 
    for ($i = max($num1Count, $num2Count); $i >= 0; $i--, $num1Count--, $num2Count--) 
    { 
        $num1t = ($num1Count >= 0) ? $num1[$num1Count] : 0; 
        $num2t = ($num2Count >= 0) ? $num2[$num2Count] : 0;
        $num = $num1t + $num2t + $flag;
        $flag = intval($num / 10);
        $num -= $flag * 10;
        $result = $num.$result; 
    } 
    if ($flag == 1) 
        $result = $flag.$result; 
    return $result; 
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика Свитозар Помощь студентам 0 26.09.2012 19:07
Длинная арифметика nimfa1 Общие вопросы Delphi 4 28.06.2012 15:16
Длинная арифметика. Steam.dll Помощь студентам 8 03.04.2011 17:47
длинная арифметика Dimarik Общие вопросы C/C++ 1 16.09.2009 12:02