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

biginteger - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 5.00
cop
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 67
08.04.2011, 21:04     biginteger #1
реализовать некоторые функции класса BigInteger, Используя перегрузку операторов.
сдвиги длинного числа влево и вправо на заданное количество цифр.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2011, 21:04     biginteger
Посмотрите здесь:

C++ BigInteger(c++)
функции класса BigInteger. C++
Java SE BigInteger
C++ BigInteger
C# BigInteger в степени BigInteger
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2011, 21:14     biginteger #2
И? Что вам не ясно?
cop
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 67
08.04.2011, 21:33  [ТС]     biginteger #3
хотелось бы увидеть код программы.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2011, 21:35     biginteger #4
Хотелось бы увидеть код класса BigInteger, ведь мы и понятия не имеем, например, в каком виде у вас представлены числа в классе.
cop
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 67
08.04.2011, 21:43  [ТС]     biginteger #5
class BigInteger
{
public:
// максимальное количество цифр в числе
static const int MAXLEN = 100;

private:
// указатель, по которому будет расположен динамический массив с цифрами
char* ar;

public:
// конструктор по 32-х битному числу (по умолчанию 0)
BigInteger(int val = 0)
{
ar = new char[MAXLEN];
for (int i = 0; i < MAXLEN; i++)
{
ar[i] = (char) (val % 10);
val /= 10;
}
}

// конструктор по строке
BigInteger(const string& str)
{
ar = new char[MAXLEN];
for (int i = 0; i < MAXLEN; i++)
{
int k = (int) str.size() - 1 - i;
ar[i] = (k >= 0) ? str[k] - '0' : 0;
}
}

// конструктор копирования
BigInteger(const BigInteger& big)
{
ar = new char[MAXLEN];
memcpy(ar, big.ar, MAXLEN);
}

BigInteger& operator =(const BigInteger& big)
{
// отсекаем присваивание самому себе
if (this == &big)
return *this;

// копируем данные
memcpy(ar, big.ar, MAXLEN);

return *this;
}

~BigInteger()
{
delete ar;
}

// преобразование в строку
void ToString(string& res) const
{
int k = MAXLEN - 1;
while (k >= 0 && !ar[k])
k--;

if (k < 0)
{
res = "0";
return;
}

res.clear();
for (; k >= 0; k--)
res += '0' + ar[k];
}

friend ostream& operator <<(ostream& ostr, const BigInteger& big)
{
string str;
big.ToString(str);
ostr << str;
return ostr;
}

friend istream& operator >>(istream& istr, BigInteger& big)
{
string str;
istr >> str;
big = BigInteger(str);
return istr;
}
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2011, 21:52     biginteger #6
Вы этот код написали, а сдвиг сделать не смогли?
cop
0 / 0 / 0
Регистрация: 10.03.2010
Сообщений: 67
08.04.2011, 21:52  [ТС]     biginteger #7
не смог
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2011, 22:15     biginteger
Еще ссылки по теме:

BigInteger C++
C++ Biginteger и переменная
BigInteger в степени BigInteger C#

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
08.04.2011, 22:15     biginteger #8
Ладно... Реализации в лоб, тупо в цикле производим сдвиг каждый раз на один разряд. Быстрее и правильнее было бы запоминать нужный кусок (равный по длине количеству разрядов, на которые сдвигаем), сдвигать оставшуюся часть сразу на нужное количество разрядов и потом к результату с нужной стороны приписывать сохранённый кусок. Но лень)))
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
BigInteger operator<<(size_t number_of_digits)
{
    string result;
 
    ToString(result);
 
    size_t len = result.length();
 
    for (size_t n = 0; n < number_of_digits; ++n)
    {
        char first = result[0];
 
        for (size_t i = 1; i < len; ++i)
            result[i - 1] = result[i];
 
        result[len - 1] = first;
    }
 
    return BigInteger (result);
}
 
BigInteger operator>>(size_t number_of_digits)
{
    string result;
 
    ToString(result);
 
    size_t len = result.length();
 
    for (size_t n = 0; n < number_of_digits; ++n)
    {
        char last = result[len - 1];
 
        for (size_t i = len - 1; i > 0; --i)
            result[i] = result[i - 1];
 
        result[0] = last;
    }
 
    return BigInteger (result);
}
Добавлено через 28 секунд
Цитата Сообщение от cop Посмотреть сообщение
не смог
Хоть бы признались, что не сами писали.
Yandex
Объявления
08.04.2011, 22:15     biginteger
Ответ Создать тему
Опции темы

Текущее время: 06:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru