Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Операция '+'


Автор: kleks 19.3.2006, 01:23
Имеются две строки, являющимися цифрами, как сложить эти строки чтобы получить правильный результат не преобразовывая строки в числа, например:

"0.005" + "0.0001" = "0.0051" (могут быть и целые числа)

Даже не знаю с чего начать... smile smile smile
заранее благодарен...

Автор: Partizan 19.3.2006, 01:52
поразрядное сложение начиная с конца строк,представляющих числа,где разряд обпределяется исходя из длины строки....всё просто...

Автор: MAKCim 19.3.2006, 12:01
переведи в double/float, сложи, затем обратно в строку, функции для этого есть

Автор: kleks 19.3.2006, 12:19
Цитата(MAKCim @ 19.3.2006, 12:01)
переведи в double/float, сложи, затем обратно в строку, функции для этого есть

smile как раз сложность заключается в этом - переводить строки в числа нельзя smile
я вроде в первом посте писал об этом...
Добавлено @ 12:23
Цитата

поразрядное сложение  начиная с конца строк,представляющих числа,где разряд обпределяется исходя из длины строки....всё просто...

А можно не много поподробнее... smile

Автор: np9mi7 19.3.2006, 12:32
Цитата
А можно не много поподробнее...
, как в первом классе - столбиком;

Автор: Athlon 19.3.2006, 13:37
а какие могут быть сложности с поразрядным сложением?
проверил наличие в числе(строке) точки, т.е. определил где единицы, десятки, а где десятые, сотые и
Цитата

как в первом классе - столбиком;

Автор: MAKCim 19.3.2006, 14:05
сначала делаем дробную часть чисел одинаковой
далее
Код

void sum(const char* a, const char* b, char devider)
{
    //выделяем память для результата ( max(length(a),length(b))+1 ), указатель в res
    int i__=length(a)-1, j=length(b)-1, ost=0, 
        k=i>j+1? i+1: j+1;
    const int convert=48;
    for (; i>=0 && j>=0; i--, j--, k--)
    {
        if (a[i]!=devider)
        {
            int s=a[i]+b[j]-2*convert+ost;
            res[k]=s%10+convert;
            ost=s/10;
        }
        else res[k]=devider;
    }
    for (; i>=0; i--, k--)
    {
        int s=a[i]-convert+ost;
        res[k]=s%10+convert;
        ost=s/10;
    }
    for (; j>=0; j--, k--)
    {
        int s=a[j]-convert+ost;
        res[k]=s%10+convert;
        ost=s/10;
    }
    if (ost) res[k]=ost+convert;
}

Автор: kleks 28.3.2006, 00:07
MAKCim спасибо огромное!!! правда я пока не совсем разобрался...отсюда вопрос: что есть переменная devider???

Автор: Partizan 28.3.2006, 18:32
разделитель судя по всему( точка или запятая)...

Автор: MAKCim 28.3.2006, 19:50
Цитата

разделитель судя по всему( точка или запятая)...

да

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)