|
|
|
Задача: Большое 16-рич. число записать в строку как 10-тич. число
|
|||
|---|---|---|---|
|
#18+
Задачка. Имеется буфер размером n байт (n <= 38). В этом буфере спрятано оочень большое целое положительное число. Это число записано в шестнадцатиричной системе и младшие разряды слева. Например: число 777777777777778 в 16-тирич. системе = 2с36280289с72, (2"с3"62"80"28"9с"72"), тогда в буфере заняты первые 7 байт следующим образом: 72, 9с, 28, 80, 62, с3, 2. Задача: число из буфера в десятичной форме записать в строку (т. е. в примере выше получить строку "777777777777778"). BYTE hi, lo; int multiplier = 1; for( ULONG i = 0; i < buffLen; i++) { hi = lo = buffer ; lo <<= 4; lo >>= 4; value += ( ( ( ULONG ) lo ) * multiplier ); multiplier *= 16; hi >>= 4; value += ( ( ( ULONG ) hi ) * multiplier ); multiplier *= 16; } Проблемы с value и вообще: int - туда много не влезет, double - тоже, да ещё и результаты очень неточные получаются :-(. Может у кого идея есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 17:22 |
|
||
|
Задача: Большое 16-рич. число записать в строку как 10-тич. число
|
|||
|---|---|---|---|
|
#18+
__int64 value; // if VC++ This is not a conversion to decimal... Check may be to convert to BCD first. Then it will be easy. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 00:46 |
|
||
|
Задача: Большое 16-рич. число записать в строку как 10-тич. число
|
|||
|---|---|---|---|
|
#18+
Есть идея в развитие того что есть. Нужно в этом же цикле когда число больше 100 наберется, его 2 последних цыфры в выходной буфер напечатать и после этого на 100 нацело поделить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 20:27 |
|
||
|
Задача: Большое 16-рич. число записать в строку как 10-тич. число
|
|||
|---|---|---|---|
|
#18+
Делить, по-моему надо на 10 и каждый раз сохнанять остаток от деления формируя результат с конца. До тех пор пока значение целночисленного деления не станет равным 0. Проблема только в том, что байтов может быть до 38 - следовательно стандартные операции не подходят. Мой совет - искать книжку по ассемблеру старых времен, где написанно как реализовать деление без использования комманд процессопа предназначенных для деления. умножения, ну или другую какую инфу, как делается деление в подобных случаях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 23:54 |
|
||
|
Задача: Большое 16-рич. число записать в строку как 10-тич. число
|
|||
|---|---|---|---|
|
#18+
Lana K. Проблемы с value и вообще: int - туда много не влезет, double - тоже, да ещё и результаты очень неточные получаются :-(. Может у кого идея есть? Я думаю, что запихивать это число во встроенный тип - неправильный путь. Я бы попробовала поработать с алгоритмами работы с большими числами. Гугл много чего находит по запросам: "multiple precision arithmetic", "large integer arithmetic". У Кнута еще об этом есть, Т.2., глава "Арифметика многократной точности". Причем если не хочется реализовывать их самой, можно подключить какую-нибудь библиотеку работы с большими числами. Можно либо всю библиотеку подключить, либо вытащить оттуда то, что нужно. Ничего конкретного посоветовать не могу, но вот, например, такая библиотека, просто первое, что я нашла Гуглом : http://www.di-mgt.com.au/bigdigits.html Поточнее можно на каком-нибудь криптографическом форуме спросить, они там часто с большими числами работают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2005, 15:08 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2032801]: |
0ms |
get settings: |
4ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
8ms |
get first new msg: |
4ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 351ms |

| 0 / 0 |
