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

Преобразование сверхбольшого двоичного числа в строку-десятичное_число. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Числа на шахматной доске http://www.cyberforum.ru/cpp-beginners/thread451276.html
В клетках шахматной доски находятся целые число. --- Определить в программе глобальные данные – константу N = 8 и двумерный числовой массив размера N x N, значения элементов которого задать операцией присваивания. Остальные необходимые переменные делать локальными в функции main. 2. Найти сумму всех отрицательных чисел на доске. Как это сделать обьясните пожалуйста... Добавлено через 3...
C++ error: cannot delete expression of type 'char' Здравствуйте. Я c++ всерьез начал заниматься недавно, и сегодня у меня вылезла ошибка, которую я раньше никогда не встречал: error: cannot delete expression of type 'char' Вылазит она, собственно, здесь: Buffer::Buffer( long int start_size ) { pointer = new char; size = start_size; actual_size = 0; http://www.cyberforum.ru/cpp-beginners/thread451271.html
C++ Объясните значение argc и argv
Ув. гуру! Дошёл в учебники до раздела об аргументах argc и argv, но что-то ничего не понял.. #include <iostream> using namespace std; int main(int argc, char *argv) { for (int i=0; i<argc; i++) { cout << argv << "\n"; }
просто интересуюсь C++
1. надо сделать чтобы полностью рандомные числа неповторялись... srand(time(NULL)) написал. 2. какую сортировку лучше всего использовать? Для будущих программ необходимо все методы знать, или 1 будет достаточно?
C++ Как написать функцию c типом long double возвращаюшую тип shot? http://www.cyberforum.ru/cpp-beginners/thread451244.html
Мне бы какой нибудь тривиальный пример в Си. Спасибо:)
C++ Треугольники Доброй ночи\утро\день всем! Сразу прошу прощения, если такая тема уже есть - но совесть моя почти чиста - искала - и не нашла ничего похожего) В общем, нужна ваша помощь в решении следующей задачи: Дано множество треугольников на плоскости. Нужно отсортировать их по возрастанию площади. Т.е. сначала вводим число N - собственно, количество треугольников(n - от 1 до 100). Далее следующие n-строк... подробнее

Показать сообщение отдельно
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
23.02.2012, 11:39     Преобразование сверхбольшого двоичного числа в строку-десятичное_число.
вот может пригодится:
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
#include <iostream>
#include <string>
#include <deque>
#include <locale>
using namespace std;
 
string integer(deque<int>& a ,int q, int p, string u)
{
    string res;
    int demolition, j, lena = a.size();
 
    do
    {
        j = 0;
        demolition = 0;      
 
        for(int i = 0; i < lena; i++)
        {       
            demolition *= q;        
            demolition += a[i];
 
            if (demolition < p && i && j) {a[j] = 0; j++;}
 
            if (demolition >= p) 
            {   
                a[j] = demolition / p;  
                demolition %= p;   
                j++;
            }
        } 
        a.resize(j);
        res = u[demolition] + res;
        lena = j;   
    }
    while(lena);
    return res; 
}
 
deque<int> addition(deque<int>& a, deque<int>& b, int q)
{ 
    deque<int> res;
    if (a.empty()) 
        res = b;
    else
    {
        int lena = a.size() - 1, lenb = b.size() - 1;
        int transfer = 0, anumber, bnumber, amount, i = 0;
 
        do 
        {
            if (lena >= i)
                anumber = a[lena-i];
            else
                anumber = 0;
 
            if (lenb >= i) 
                bnumber = b[lenb-i];
            else
                bnumber = 0;
 
            amount = anumber + bnumber + transfer;
 
            if (amount >= q)
            {
                transfer = amount / q;
                amount %= q;
            }
            else
                transfer = 0;
 
            res.push_front(amount);
            i++;
        }
        while(lena >= i || lenb >= i);
 
        if (transfer > 0) res.push_front(transfer);
    }
    return res;
}
 
deque <int> multiplication(deque<int>& aa, deque<int>& bb, int q)
{
    deque<int> r, res, a = aa, b = bb;
    if(a.size() > b.size()) swap(a, b);
    int transfer, product, h = 0, k = 0;
 
    while(!a.empty() && !a.back())  {a.pop_back(); h++;}    
    while(!b.empty() && !b.back())  {b.pop_back(); h++;}
 
    for(int i = a.size() - 1; i >= 0; i--)
    {
        r.clear(); 
        transfer = 0;       
 
        for (int j = b.size() - 1; j >= 0; j--)
        {                       
            product = a[i] * b[j] + transfer;
 
            if (product >= q) 
            {
                transfer = product / q;
                product %= q;
            }
            else
                transfer = 0;         
 
            r.push_front(product);
        }
 
        if (transfer > 0) r.push_front(transfer);
        r.resize(r.size() + k);
        res = addition(res, r, q);
        k++;
    }       
 
    res.resize(res.size() + h);
    return res;
}
 
string fractional(deque<int>& b, int q, deque <int>& p, int l, string u)
{       
    string res;
    int signs,LenInteger, i = 0, sum, SignsFractional = 0;
    deque<int> r;      
    while(!b.empty() && !b.front()) {b.pop_front(); SignsFractional++;}
 
    do  
    {
        i++;
        signs = b.size() + SignsFractional;
 
        r = multiplication(b, p, q);
        b.clear(); 
 
        LenInteger = r.size() - signs;
        sum = 0;
 
        if(LenInteger > 0) 
        {
            for (int t = 0; t < LenInteger; t++)
            { 
                sum *= q;
                sum += r.front();
                r.pop_front();
            }
        }
        else
        {
            sum = 0;
            SignsFractional = (-1) * LenInteger; 
        }
 
        res += u[sum];
 
        while(!r.empty() && !r.front()) 
        {
            r.pop_front();
            SignsFractional++;
        }
 
        b = r;
        r.clear(); 
    }
    while(i < l && !b.empty()); 
    return res;
}
 
string output(string a, int q, int p, int l)
{
    string u("0123456789ABCDEF"), b, res;
 
    if (a.find(',') != string::npos) a[a.find(',')] = '.';
 
    if (a.find('.') != string::npos) 
    {
        b = a.substr(a.find('.') + 1);
        a = a.substr(0, a.find('.'));  
    }
 
    deque<int> array;
    for (unsigned int i = 0; i < a.size(); i++)
        array.push_back(u.find(toupper(a[i])));
 
    res = integer(array, q, p, u);
 
    if (b.size())
    {
        deque<int> array2, pp;
        for (unsigned int i = 0; i < b.size(); i++) 
            array2.push_back(u.find(toupper(b[i])));
 
        for (int p2 = p; p2; p2 /= q) pp.push_front(p2 % q);
 
        res += "." + fractional(array2, q, pp, l, u);
    }    
    return res;
}
 
int main(void)
{     
    setlocale(LC_ALL,"Russian");
    string a;               
    int q, p;
    cout << "Введите число: "; cin >> a;  
    cout << "Введите исходную систему счисления: "; cin >> q;
    cout << "Введите конечную систему счисления: "; cin >> p;
    int l = 30; 
    cout << string(80, '_') << output(a, q, p, l) << endl;
    system("pause");
}
перевод длинных чисел между чисел между сс 2-16
 
Текущее время: 00:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru