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

сдвиги длинного числа влево и вправо на заданное количество цифр - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Бесконечная сумма http://www.cyberforum.ru/cpp-beginners/thread325559.html
Доброго времени суток уважаемые форумчане, возникло такое задание: Даны действительные числа х и eps. Вычислите приближенно значение бесконечной суммы S. Приближение считается достигнутым, если полученная сумма нескольких составляющих, и очередного слагаемого оказывается по модулю меньше eps. S - http://i028.***********/1106/26/dd268cbe653f.jpg помогите пожалуйста, я не до конца понял как...
C++ Функция для просмотра ключа в реестре Прошу Вас помочь разобраться с функциями реестра интересует просмотр реестра на наличие соответствующего ключа и его параметров. http://www.cyberforum.ru/cpp-beginners/thread325557.html
C++ даты в реестре
подскажите пожалуйста, как можно записать в реестр дату первого запуска программы и как сравнить текущую дату с этой датой первого запуска
C++ Матрица, перегрузка операторов
Дня доброго. Есть такая вот задачка: 24.02.Создать класс для работы с матрицами. Предусмотреть, как минимум, функции для сложения матриц, умножения матриц, транспонирования матриц, присваивания матриц друг другу, установка и получение произвольного элемента матрицы. Необходимо перегрузить соответствующие операторы есть вот такой класс #include<iostream> using namespace std; class matrix {
C++ Разработать программу, которая выводит на экран горизонтальную линию из символов http://www.cyberforum.ru/cpp-beginners/thread325514.html
Разработать программу, которая выводит на экран горизонтальную линию из символов. Число символов, какой использовать символ, и какая будет линия- вертикальная, или горизонтальная - указывает пользователь . помогите решить :) Не лезьте в чужие темы, для своих вопросов создавайте новые темы.
C++ Исчеpли свойства в окне Properties Помогите пожалуйста... Проблема с Visual Studio!! Раньше когда я например в resorce view тыкал на любой элемент и окне propeties менял его название, свойства... а сейчас у меня просто пустое окно properties и там ничего не отображается... помогите!!!!! подробнее

Показать сообщение отдельно
ValeryLaptev
Эксперт C++
1004 / 783 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
25.06.2011, 19:43     сдвиги длинного числа влево и вправо на заданное количество цифр
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;        // -- лучше писать префикс std:: для каждого системного имени
 
class BigInteger
{
public:
        // максимальное количество цифр в числе
        static const int MAXLEN = 100;
 
private:
        // указатель, по которому будет расположен динамический массив с цифрами
        //char* ar;
        vector<char> ar;            // -- вектор цифр --
        // -- младшая цифра по младшему индексу --
        
public:
        // конструктор по 32-х битному числу (по умолчанию 0)
        BigInteger(int val = 0)
        {
                // ar = new char[MAXLEN]();         // -- сразу и обнулили --
                // for (int i = 0; i < MAXLEN; i++)
                if(val == 0) ar.push_back(0);
                else
                while(val > 0)
                {
                        ar.push_back(val % 10));
                        val /= 10;
                }
        }
 
        // конструктор по строке
        BigInteger(const string& str)
        {
                // ar = new char[MAXLEN]();
                //for (int i = 0; i < MAXLEN; i++)
                for (size_t i = 0; i < str.size(); i++)
                {
                        size_t k = str.size() - 1 - i;
                        ar.push_back(str[k] - '0');
                }
        }
 
        // конструктор копирования -- можно не писать! --
        BigInteger(const BigInteger& big)
        {
                //ar = new char[MAXLEN];
                //memcpy(ar, big.ar, MAXLEN);
                ar = big.ar;
        }
        // -- можно не писать --
        // -- но в вашем коде лучше так сделать -- 
        BigInteger& operator =(const BigInteger& big)
        {
                // отсекаем присваивание самому себе
                if (this != &big)
                  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];
        }
// -- можно проще сделать -- и для вашего кода тоже --
string ToString() const
{  string res;
   for(size_t i = 0; i < ar.size(); ++i)
      res += ('0' + ar[k]);
   reverse(res.begin(), res.end()); //-- надо ли переворачиквть - нужно подумать          
   return res;
} 
        
BigInteger operator<<(size_t number_of_digits)
{
    string result = ToString();     // -- строка - перевернута!
     //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;
    }
 */
 result = result + '0';         // сдвинули влево - добавили младший ноль!
    return BigInteger (result);
}
 
BigInteger operator>>(size_t number_of_digits)
{
    string result = ToString();
 //   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;
    }
 */
 result = result.substr(1);     // -- отрезаем младший символ --
    return BigInteger (result);
}
 
Текущее время: 07:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru