С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Длинная арифметика - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С использованием графического интерфейса и библиотеки MFC написать программу вычисления значения выражения при заданных исходных данных http://www.cyberforum.ru/cpp-beginners/thread572955.html
Огромная просьба помочь! С использованием графического интерфейса и библиотеки MFC написать программу вычисления значения выражения при заданных исходных данных. Учесть область определения...
C++ Графический Интерфейс Добрый день, у кого-то есть программы которая выводит на экран анимированный треугольник или квадрат , используя GDI. Программа должна быть под windows. http://www.cyberforum.ru/cpp-beginners/thread572941.html
C++ Написать програму в С++
Ввести матрицу размером NхМ. Память для массива выделить динамически, вывести на экран исходные данные и полученный результат. Задание: Определить сумму элементов, расположенных на главной диагонали...
Написать програму в С++ C++
Ввести одномерный статический массив из k чисел. Вывести на экран ис-ходные данные и полученный результат в виде двух списков в диалоговом окне. Задание: Вывести все неповторяющиеся элементы...
C++ Напишите прораму в С++ http://www.cyberforum.ru/cpp-beginners/thread572916.html
C++ .Обчислити визначений інтеграл I подробнее

Показать сообщение отдельно
G@leON
6 / 6 / 1
Регистрация: 02.06.2009
Сообщений: 99

Длинная арифметика - C++

13.05.2012, 13:32. Просмотров 1829. Ответов 14
Метки (Все метки)

Здраствуйте, пишу модуль длинной математики. В принципе, работоспособность у него положительная. Но в силу моей неопытности меня мучают вопросы оптимизации. М.б. кто то сможет (или уже смог) реализовать более красивый код, чем мой.Собственно сначала ввод/вывод.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*  Функция long_input не возвращает значения, а работает с сылочными параметрами.
    Эти параметры: ссылка на строку ввода и на vector<int>,
    в который и будет записано число любой размерности.
    В каждый элемент вектора записывается 4-значная цифра из строки.
    Предположим, в строку вы записали 103487365824375284.
    Тогда в векторе у вас будет следующее представление: 5284 | 2437 | 3658 | 3487 | 10
*/
 
void long_input(vector<int> &l_number, string &l_str){
    int len = 4;
        // len - скольки значное число хранится в каждом elem (4 - оптимально)
    for (int index = l_str.size() - 1; index >= 0; index -= len)
    {
        int start = index - len + 1;
        if (start < 0)
            start = 0;
        string elem = l_str.substr(start, index - start + 1);
            // Ф-ция substr извлекает подстроку длинной (index - start + 1)
            // из строки l_str начиная с позиции start
        l_number.push_back(atoi(elem.c_str()));
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*  Функция long_output_s не возвращает значения, а работает с сылочными параметрами.
    Эти параметры: ссылка на vector<int>, в котором записано число и строку вывода.
    Здесь преобразование обратное тому, что происходит при вводе.
*/
 
void long_output_s(string &l_str, vector<int> &l_number) {
    l_str = "";
    bool l_p = true;
    char buffer[4];
    vector<int>::iterator iter = l_number.end() - 1;
    sprintf(buffer, "%d", *iter);
    l_str += buffer;
    if (iter == l_number.begin())
        l_p = false;
    while (l_p){
        --iter;
        if (iter == l_number.begin())
            l_p = false;
        sprintf(buffer, "%.4d", *iter);
        l_str += buffer;
    }
 
}
Как допишу модуль, и вытащу (с вашей помошью, если можно) из него все костыли, обязательно поделюсь))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.