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

Сверхбольшие числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 2 вопроса http://www.cyberforum.ru/cpp-beginners/thread346548.html
Всем привет! У меня 2 глупых вопроса 1. Допустим, такой код int value() const { return m_nValue; } В чём смысл const?
C++ Синхронизация доступа Собственно есть массив структур. У данной структуры есть переменная, которая хранит состояние данной структуры(готова,не готова). В процессе работы приложение (многопоточное) циклично проверяет этот массив структур на готовность тех или иных структур, обращаясь к этой переменной каждой структуры, при этом такой опрос происходит в различных потоках программы. Значение переменной при опросе не... http://www.cyberforum.ru/cpp-beginners/thread346539.html
C++ Односвязный список (задача)
Задача в следующем есть код нужна переправить его таким образом чтобы программа удаляла заданный символ. Сейчас программа удаляет 3 первых символа. #include <iostream> using namespace std; struct Element { // Данные
Цифровая подпись приложения C++
Здравствуйте. Когда запускаю приложение, антивирус ругается на отсутсвие цифровой подписи, и спрашивает разрешить запуск или нет. Вопрос. Как реализовать или встроить в свое приложение цифровую подпись? Чтобы ни один антивирус больше не ругался на отсутствие цифровой подписи в моем приложении..
C++ Проверьте пожалуйста. Правильно ли написано. http://www.cyberforum.ru/cpp-beginners/thread346496.html
Программа работает как в задании. Но может есть ошибки? Подскажите. #include <iostream> #include <string> using namespace std; struct car { char name; int god;
C++ Ошибка strcat ...segmentation fault имеется функция показывает что segmentation fault(только в режиме дебага) в красных строках...а при компиляции ошибки не показывает...странно..подскажи ошибка в строке 32 и 43 void Fix_Grub(char *weight_and_hight){ // Правим Grub... FILE *f=fopen("/etc/default/grub","r"); if(!f) printf("Ошибка: fix grub 1"); fseek(f,0,SEEK_END); // Чтобы узнать кол-во символов...указатель в... подробнее

Показать сообщение отдельно
chuvak2008f
4 / 4 / 1
Регистрация: 10.01.2012
Сообщений: 43
26.05.2012, 15:04     Сверхбольшие числа
Люди помогите сделать побитовое умножение (&) со сверхбольшими числами или если точнее массив цифр в *char который являет собой сверхбольшое число.
Для примера приведу код из класса Verylong реализующий обычное целочисленное умножение сверхбольших.
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
// Умножение
class Verylong {
    private:
        Verylong multdigit(int) const;
        Verylong mult10(int) const;
    public:
        char *vlstr; // массив цифр
        int  vlen;    // размер
        int  vlsign;
        friend Verylong operator * (const Verylong &, const Verylong &);
...};
Verylong operator * (const Verylong &u, const Verylong &v) {
    Verylong pprod("1"), tempsum("0");
 
    for (int j=0; j<v.vlen; j++) {
        int digit = v.vlstr[j] - '0';
        pprod = u.multdigit(digit); // uuu * v = pprod
        pprod = pprod.mult10(j);
 
        tempsum += pprod;
    }
    tempsum.vlsign = u.vlsign ^ v.vlsign;
    return tempsum;
}
//умножение аргумента на 10
Verylong Verylong::mult10(int num) const {
    if (*this != zero) {
        int j = 0, dd = vlen + num, bb = vlen - 1;
        char *temp = new char [dd + 1]; assert(temp != NULL);
 
        for (j=0; j<vlen; j++)  temp[j] = vlstr[bb-j];
        for (j=vlen; j<dd; j++) temp[j] = '0';
 
        temp[dd] = '\0';
        Verylong result(temp);
        delete [] temp;
        return result;
    } else
        return zero;
}
//умножение числа на аргумент (цифру)
Verylong Verylong::multdigit(int num) const {
    int j = 0, carry = 0, dprod = 0;
    if( num ) {
        char *temp = new char[vlen + 2]; assert(temp != NULL);
        for(j = 0; j<vlen; j++) {
            int d1 = vlstr[j] - '0',
            digitprod = d1*num + carry;
 
            if( digitprod >= 10 ) {
                carry = digitprod/10;
                digitprod -= carry*10;
            } else
                carry = 0;
            temp[j] = digitprod + '0';
        }
 
        if( carry ) temp[j++] = carry + '0';
        temp[j] = '\0';
 
        strrev(temp);
        Verylong result(temp);
        delete [] temp;
        return result;
    } else
        return zero;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru