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

Программа со сверхбольшими числами не выполняется до конца - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перевод чисел из 10 СС в 2 СС http://www.cyberforum.ru/cpp-beginners/thread785033.html
Помогите пожалуйста написать программу,которая представляла бы введенное число типа unsigned char в двоичном виде с помощью битовых масок.
C++ нарисовать розу ветров на с++ нарисовать розу ветров на языке с++? http://www.cyberforum.ru/cpp-beginners/thread785025.html
C++ Волновой алгоритм
Подскажите пожалуйста, на сколько сложно изготовить из матрицы 0000 0000 0000 напр.4345 3234 2123 3234 Только при помощи обычных циклов.
C++ Выделение динамической памяти для матрицы
Здравствуйте! Подскажите, пожалуйста, что делаю не так..написала программу, которая считывает двумерный массив...с помощью операторов new и delete выделила память в куче... Но, после ввода...
C++ Программа для включения/выключения WiFi у роутера http://www.cyberforum.ru/cpp-beginners/thread784976.html
Всем доброго времени суток. Появилась нужда программно отключать или включать WiFi у роутера. Роутер Tenda W368R. Отключается в настройках простым убором галочки с Enable Wireless. Но каждый раз туда...
C++ Функция типа bool Сумма первой и последней цифры в введенном четырехзначном числе является нечетным значением. Если это так, то функция должна возвращать либо false, либо true. То есть, вводим число 4023 (и должно... подробнее

Показать сообщение отдельно
kickupduster
4 / 4 / 1
Регистрация: 04.08.2013
Сообщений: 20
02.09.2013, 17:26
Вот рабочая функция деления с учетом знаков
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
verylong verylong::operator / (const verylong v) //целочисленное деление
{
    char *str_v = new char[vlen]; //временная строка
    strcpy(str_v,vlstr); strrev(str_v); //переворачиваем ее в нормальный вид
    verylong b, rez, vltemp, null;
    null.vlen = 1; 
    b = abs(v); //значение по модулю
    if (b == null) {cerr << "ОШИБКА!!! Деление на ноль!!!" << endl; return null;}
    if (abs(*this) < b) return null; //если делимое меньше делителя - возвращаем ноль
    for(int i=0, n=0; i<vlen;) //перебираем разряды делимого
    {
        while(vltemp < b) //берем разряды делимого
        {                 //пока не получим число большее делителя
            if (i >= vlen) return rez; 
            int d = str_v[i]-'0'; //берем разряд
            if (d == 0 && vltemp == null) rez = mult10(rez); //сносим нули при необходимости
            else vltemp = mult10(vltemp) + d; //формируем число 
            i++;
        }
        if (vltemp >= b) //если получили такое число
        {
            while(vltemp >= b) //уменшаем его
            {                  //пока остаток не станет меньше делителя
                vltemp = vltemp - b; 
                n++; //считаем значение разряда
            }
            rez = mult10(rez) + n; //формируем результат
            n = 0; //зануляем значение разряда
        }          //и повторяем цикл пока не пройдем весь делитель
    }
    if (minus == true || v.minus == true) rez.minus = true; //учитываем знаки исходных данных
    if (minus == true && v.minus == true) rez.minus = false;
    return rez;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru