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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.02.2014, 12:06   #1
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию Длинная арифметика(вычитание)

Добрый день!
Возникла такая необходимость реализовать вычитание строк в столбик в идеологии этого способа для экономии ресурсов принято реализовывать через флаг "-1", тоесть в цикле когда отнимаем от меньшего большее ставим флаг в true... не могу понять как это реализовать....
Tyoma5891 вне форума Ответить с цитированием
Старый 10.02.2014, 12:23   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Цитата:
вычитание строк в столбик
Возможно имеется ввиду вычитание чисел в столбик?
Цитата:
не могу понять как это реализовать....
Вот примеры вычитания в столбик:
Вычитание натуральных чисел столбиком, примеры, решения.
Вычитание в столбик
Цитата:
Длинная арифметика(вычитание)
Длинная арифметика вообще нужна для поддержки операндов очень большой длинны. Подробнее можно посмотреть здесь:
Длинная арифметика (PHP.SU)
Длинная арифметика

Последний раз редактировалось Streletz; 10.02.2014 в 12:52.
Streletz вне форума Ответить с цитированием
Старый 10.02.2014, 12:33   #3
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Возможно имеется ввиду вычитание чисел в столбик?
Вот примеры вычитания в столбик:
Вычитание натуральных чисел столбиком, примеры, решения.
Вычитание в столбик

Длинная арифметика вообще нужна для поддержки операндов очень большой длинны. Подробнее можно посмотреть здесь:
Длинная арифметика (PHP.SU)
Длинная арифметика
спасибо но я с этим всем знаком, почитайте то о чем я написал ещё раз, меня интересует способ реализации с флагом...
Tyoma5891 вне форума Ответить с цитированием
Старый 10.02.2014, 13:12   #4
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Алгоритм "с флагом" как раз описан во второй статье, из тех, что были предложены в качестве помощи в моём посте #2. Вам по сути остаётся только реализовать.
В прочем, если реализация на основе математического описания алгоритма вызывает трудности и/или Вам нужен конкретный пример, то он гуглится с 1го раза.
Пожалуйста: Длинная арифметика. Урок 2. Сложение и вычитание.

Последний раз редактировалось Streletz; 10.02.2014 в 17:27.
Streletz вне форума Ответить с цитированием
Старый 10.02.2014, 16:58   #5
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Алгоритм "с флагом" как раз описан во второй статье, из тех, что были предложены в качестве помощи в моём поста #2. Вам по сути остаётся только реализовать.
В прочем, если реализация на основе математического описания алгоритма вызывает трудности и/или Вам нужен конкретный пример, то он гуглится с 1го раза.
Пожалуйста: Длинная арифметика. Урок 2. Сложение и вычитание.
Спасибо большое, буду учится гуглить
Tyoma5891 вне форума Ответить с цитированием
Старый 10.02.2014, 17:28   #6
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Радость

Пожалуйста!
Streletz вне форума Ответить с цитированием
Старый 12.02.2014, 17:08   #7
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
Вопрос Сложение(длинная арифметика)

Все-таки что-то не могу понять написал как тут:
http://cybern.ru/csharp-long-math-add-substract.html
вот код моей функции:
PHP код:
function sum($num1$num2
{
    
$result "";
    
$flag 0;
    
$num1Count strlen($num1);
    
$num2Count strlen($num2);
    
$maxNumCount max($num1Count$num2Count);
    
    for (
$i $maxNumCount-1$i >=0$i--)
    {
        
$num1t = ($num1Count $i) ? $num1[$i] : 0;
        
$num2t = ($num2Count $i) ? $num2[$i] : 0;
        
$num $num1t $num2t $flag;
        if (
$num >= 10)
        {
            
$num -= 10;
            
$flag 1;
        }
        else
        {
            
$flag 0;
        }
        
$result $num.$result;
    }
    if (
$flag == 1)
    {
        
$result $flag;
    }
    return 
$result;

но оно неправильно складывает где моя ошибка???
Tyoma5891 вне форума Ответить с цитированием
Старый 12.02.2014, 18:00   #8
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Ошибку в студию!
Цитата:
написал как тут:
В статье функции сложения и вычитания работают с массивами целых чисел.
Простите, но когда алгоритм переписывается с одного языка на другой его необходимо не просто переписать, но и адаптировать к особенностям того языка, на который Вы его переписываете. В отличие от C#, PHP не строго типизированный язык. Поэтому необходимо особенно тщательно контролировать, что поступает на вход алгоритма, что происходит с данными внутри него и что получается на выходе.
Но, ошибку, в любом случае, в студию!
Streletz вне форума Ответить с цитированием
Старый 12.02.2014, 18:11   #9
Tyoma5891
Пользователь
 
Регистрация: 16.08.2013
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Ошибку в студию!
В статье функции сложения и вычитания работают с массивами целых чисел.
Простите, но когда алгоритм переписывается с одного языка на другой его необходимо не просто переписать, но и адаптировать к особенностям того языка, на который Вы его переписываете. В отличие от C#, PHP не строго типизированный язык. Поэтому необходимо особенно тщательно контролировать, что поступает на вход алгоритма, что происходит с данными внутри него и что получается на выходе.
Но, ошибку, в любом случае, в студию!
сделайте
echo sum("699", "1");

выдает 799
Tyoma5891 вне форума Ответить с цитированием
Старый 12.02.2014, 19:21   #10
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
Плохо

Судя по входным данным и результатам, "столбик" начинает суммировать, не "справа", как должно быть, а "слева". Что не удивительно, потому, что обход обоих массивов в функции идёт именно "слева".
Поэтому, в соответствии с математическим описанием алгоритма сложения в столбик, необходимо внести в функцию соответствующие исправления.
Цитата:
сделайте
А сами?! Простите, я искренне не хочу Вас обидеть, но это уже перебор!
До этой цитаты, Вы пишите всё более-менее нормально. Но, потом в открытую просите халявы. Описание сложения и вычитания в столбик, есть не только в сети. Математическое описание алгоритма даётся в учебниках для начальной школы.
Что говорить, Вы даже поверхностно не проанализировали результаты работы своего алгоритма! Так дело не пойдёт!
Сделайте сами. Здесь, на форуме,помогают советами тем, кто сам что-то делает, или хотя бы пытается делать.
Простите, я искренне не хотел, Вас обидеть, но это с Вашей стороны действительно перебор!
Streletz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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