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

Кнут - деление длинных чисел - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ C++ http://www.cyberforum.ru/cpp-beginners/thread562233.html
Где закачать C++ для 64-разрядную Windows 7
C++ Индексы седловых точек Помогите пожалуйста! Буду премного благодарен за решение этой задачи на языке C++: Элемент матрицы назовём седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в... http://www.cyberforum.ru/cpp-beginners/thread562209.html
Вращение прямоугольника вокруг оси C++
Программа должна вращать прямоугольник с заданными параметрами длины и ширины, вокруг оси. Общий алгоритм приведен ниже. Вопрос: как определить точки 2 и 4 исходя из уже имеющихся (1, 3). ...
Красно-черные деревья C++
Помогите, пожалуйста. Запускаю программу и выводится только дерево, не понимаю, как с ним работать, почему нельзя проделать операцию добавления элемента? #include <stdio.h> #include <stdlib.h>...
C++ Трудность с компиляцией классов http://www.cyberforum.ru/cpp-beginners/thread562162.html
Здраствуйте. У меня возникла проблема при компиляции программы из классов с++. Программа заключается в написании системы управления лифтом. Классы полностью описывают все функции и связанны друг с...
C++ таблица умножения от 1 до 100 Здравствуйте у меня возник такой вопрос. Вот я создал маленький программ который создает таблицу умножения с одного до ста. Но когда я запускаю программ мне показывает только последнюю часть таблицы.... подробнее

Показать сообщение отдельно
Shandr_71
13 / 13 / 1
Регистрация: 05.12.2011
Сообщений: 84

Кнут - деление длинных чисел - C++

01.05.2012, 16:03. Просмотров 1468. Ответов 0
Метки (Все метки)

Нужна помощь в переводе алгоритма деления длинных чисел из книги:
Д. Э. Кнут - Искусство Программирование Том 2 Получисленные Алгоритмы.
Особенно интересен третий шаг, я никак не могу понять, что там имеется в виду.

Мой код 4го шага:
C++
1
2
3
4
5
6
7
int q((static_cast<int>(num[j+n])*255+static_cast<int>(num[j+n-1]))/v[n-1]);
int r((static_cast<int>(num[j+n])*255+static_cast<int>(num[j+n-1]))%v[n-1]);
while(q!=255 || (q*static_cast<int>(v[n-2])<=255*r+static_cast<int>(num[j+n-2])))
    {
        q--;
        r+=static_cast<int>(v[n-1]);
    }
num соответствует переменной u из книги, v - v, n и m те же.
Числа предствлены в виде std::vector<unsigned char>, младший разряд соответствует нулевому элементу.

Добавлено через 6 часов 3 минуты
Вопрос все еще актуален.

Добавлено через 16 часов 53 минуты
Проблема решена:
C++
1
2
3
4
5
6
7
8
9
10
int q((static_cast<int>(u[j+n])*255+static_cast<int>(u[j+n-1]))/v[n-1]);
    int r((static_cast<int>(u[j+n])*255+static_cast<int>(u[j+n-1]))%v[n-1]);
 
    if(q==ds_int || (q*static_cast<int>(v[n-2])>ds_int*r+static_cast<int>(u[j+n-2])))
    {
        q--;
        r+=static_cast<int>(v[n-1]);
        if(q*static_cast<int>(v[n-2])>ds_int*r+static_cast<int>(u[j+n-2]) && r<ds_int)
            q--;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru