Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 20.04.2022
Сообщений: 21

Задача закодировать число

27.04.2022, 10:28. Показов 869. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет.
У меня есть задача закодировать число. В кратце надо работать с факториалами. О принципе кодировки почитать по этой ссылке. http://en.wikipedia.org/wiki/F... ber_system.

Скажу, если кодировать все числа до 3628799, то все работает отлично. Проблема заключена в числах более высокого порядка (если делить по модулю на число на 11 то при результате деления =10 надо вывести 'A' (-> 0 1 2 3 4 5 6 7 8 9 A B C ...)). Так вот, чехарда у меня начинается при переводе чисел в таблицу ASCII и с ss вроде бы данные в ss все есть и все правильные, но они не хотят передаваться так как я хочу (все что закинуто в ss в качестве int передается в data_encode, char нет).


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
static std::string dec2FactString(long long nb);
static long long factString2Dec(std::string &str);
 
int main()
{
    std::string code = dec2FactString(999999999);
    long long int x = factString2Dec(code);
    
    std::cout<< 999999999 << " " << code << " " << x;
 
    return 0;
}
 
 
static std::string dec2FactString(long long nb)
{
      // init 
    long long x = nb;
    std::string data_encod;
    std::stringstream ss;
    char y = ' ';
    
      // coder
    for(int i = 1; x!= 0; i++){
        if(i > 9)
        {   
            if((x / i) == 1 && (x % i) == 0)
            {
                y = 'A' + i - 10;
                ss << y;
                break;
            }
            else if (x % i > 9)  y = 'A' + x % i;
            else                 y = x % i;
            
            ss << y;
            x /= i;
            continue;
        }
        
        ss << x % i;
        x /= i;
    }
    
      // reverse data_coder
    data_encod = ss.str();
    for (int i = 0, j = data_encod.length() - 1; i < j; i++, j--)
        std::swap(data_encod[i], data_encod[j]);
    
    return data_encod;
}
 
static long long factString2Dec(std::string &str)
{
      // init
    std::string stri = str;
    unsigned short y = stri.length() - 1;
    long long int x = 0;
    short y1 = 0, y2 = 0;
    
      // decoder
    for(int i = 0; i < stri.length() - 1; i++, y--)
    {
        y1 = static_cast<int>(str[i]);
        y2 = static_cast<int>(str[i+1]);
        
        if(y1 > 64) y1 = 10 + y1 - 65;
        else        y1 = y1 - 48;
        
        if(y2 > 64) y2 = 10 + y2 - 65;
        else        y2 = y2 - 48;
        
        if(!i) x = y1 * y + y2;
        else   x = x  * y + y2;
    }
    return x;
}
ниже пример того что вышло из ss


кодирование и декодирование
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.04.2022, 10:28
Ответы с готовыми решениями:

Стеганография: Введённое с Консоли число закодировать с помощью пробелов
Здравствуйте, помогите пожалуйста. Мне дали задание с помощью стеганографии сделать так, чтобы в консоли ввести число, и в файле...

Как узнать максимальное число, которое можно закодировать 12 байтами?
Как узнать максимальное число, которое можно закодировать 12 байтами (96 битами)? Добавлено через 50 секунд Вопрос встал после...

Задача о возможности закодировать информацию о 4-рёх возможных сосчитанных внешним слоем объектах в два нейрона скрытого
Здравствуйте, пришёл к выводу что чтение учебников по нейросетям не дают мне желаемого уровня знаний, и без азов комбинаторики мне никак. ...

1
place status here
 Аватар для gunslinger
3190 / 2227 / 640
Регистрация: 20.07.2013
Сообщений: 6,022
27.04.2022, 22:21
Лучший ответ Сообщение было отмечено z1run как решение

Решение

В билдере такой код получился:
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
String code(unsigned __int64 n)  // __int64 = long long
{
  String result = "", alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  unsigned i = 0;
  do
  {
    i++;
    result = String(alphabet[n % i + 1]) + result;
    n /= i;
 
  } while (n);
  return result;
}
//---------------------------------------------------------------------------
unsigned __int64 decode(String str)
{
  unsigned __int64 result = 0, num = 0, memb = 1;
  for (unsigned i = str.Length() - 1; i >= 1; i--)
  {
    num++;
    memb *= num;
    result += ((str[i] >= 'A' && str[i] <= 'Z') ? str[i] - 'A' + 10 : str[i] - '0') * memb;
  }
  return result;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2022, 22:21
Помогаю со студенческими работами здесь

Задача число и число записанное в обратном направлении сумма целого числа
ПОЖАЛУЙСТА помогите составить программу на соde::bloks c++,только начал учится в колегии после 10 лет перерыва между школой. Задача число...

Задача Дано целое число N (> 0). Найти сумму 1 + 1/2 + 1/3 + . + 1/N (вещественное число)
Доброе утро. Подскажите пожалуйста, правильно ли я решил задачу. Задача Дано целое число N (&gt; 0). Найти сумму 1 + 1/2 + 1/3 + ... +...

Задача трехзначное число. В нем зачеркнули первую слева цифру и приписали ее справа. Вывести полученное число
на языке си решите ))

Закодировать строку
Подскажите, пожалуйста, что не так в коде. Дана строка-предложение. Закодировать ее, т.е. указать сначала все символы, расположенные на...

Закодировать в Insight
Засомневалась, куда же тему отнести. Пишу лабораторную работу по информатике. Дан отладчик Insight 1.01 Нужно закодировать с его...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru