Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2020, 00:49   #1
justmuve
 
Регистрация: 16.12.2014
Сообщений: 4
По умолчанию Преобразовать число из двадцатеричной системы счисления к двоичной системе

Дана строка, содержащая число в двадцатеричной системе исчисления. Преобразовать число в строке к двоичной системе.
Код ниже переводит десятичное число в двоичную систему счисления. Помогите пожалуйста переделать, чтоб двадцатеричное число преобразовать в двоичное.
Код:
#define _CRT_SECURE_NO_DEPRECATE
#include <windows.h>
#include "stdio.h"
#include "conio.h"
#include "locale.h"

int main(int argc, char* argv[])
{
	setlocale(0, "rus");
	int a, i, mass[21];
	for (i = 0; i < 21; i++)
	{
		mass[i] = 0;
	}
	printf("Введите число: ");
	scanf_s("%d", &a);
	i = 0;
	while (a != 0)
	{
		if (a % 2 == 0)
		{
			mass[i] = 0;
			a = a / 2;
		}
		else
		{
			mass[i] = 1;
			a = a / 2;
		}
		i++;
	}
	i = i - 1;
	for (; i >= 0; i--)
		printf("%d", mass[i]);
	_getch();
	system("pause");
	return 0;
}
justmuve вне форума Ответить с цитированием
Старый 28.05.2020, 09:07   #2
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

сканируешь 20-ричное начиная с младшего разряда (mass[0]). Младший разряд умножается на десятичную 20

более старший разряд (mass[1]) умножается на 20*20

ещё более старший разряд (mass[2]) умножается на 20*20*20

и так далее

все произведения суммируешь - это будет результат. Результат уже двоичный, поскольку данные в компе не умеют иначе храниться. Далее отобрази в нужном формате
Алексей1153 вне форума Ответить с цитированием
Старый 28.05.2020, 09:12   #3
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

можно оптимизировать процесс сканирования - начать со старшего значащего разряда.
Его кладём в сумму.
Затем, если есть более младший разряд, сумму умножаем на 20 и складываем с текущим разрядом. И так далее
Алексей1153 вне форума Ответить с цитированием
Старый 28.05.2020, 10:13   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Вот интересно - 20-ричная, как там обозначаются цифры после 15? В hex - там A...F. А тут дальше по алфавиту G,H ? Впрочем, она - не нормированная стандартами, как захотим, так и сделаем ?
Так вот, для начала надо эту 20-ю цифру в число преобразовать.
digitalis вне форума Ответить с цитированием
Старый 28.05.2020, 10:21   #5
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

digitalis,
int mass[21];

тип int - никак не отображается разряд, как есть так и есть. Преобразовывать не надо
0,1,2,..... 10,11,12.....18,19
Алексей1153 вне форума Ответить с цитированием
Старый 28.05.2020, 10:37   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

Интересно девки пляшут... В 16-ричном тоже ничего преобразовывать не надо? И 255 (дес.) - никаких там FF, а просто и ясно: 1515 ?
Я всегда считал, что в N-ричной системе счисления должен существовать набор цифр 0...N-1
Если так, как предлагаете, то надо условиться и это ясно определить, что каждый разряд 20-ричного числа обозначается парой цифр 00 ... 19 или разделять их запятыми, но это уже будет не система счисления, а галиматня . IMHO, разумеется.
Кстати, открою маленькую тайну: число, выведенное на экран (на бумагу) никаким другим образом не может отображаться, кроме как символьной строкой - символы, являющиеся цифрами данного набора.

Последний раз редактировалось digitalis; 28.05.2020 в 10:41.
digitalis вне форума Ответить с цитированием
Старый 28.05.2020, 10:43   #7
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

digitalis, однолитерные обозначения A,B,C,D,E,F - это лишь удобное отображение для человека. Для компьютера это десятичные 10,11,12,13,14,15 или двоичные 1010,1011,1100,1101,1110,1111

в массиве uint8_t можно представлять 256-ричные числа
в массиве int32_t - 2147483648 - ричные
в массиве uint32_t - 4294967296- ричные

каждый элемент массива - один разряд как есть, ничего преобразовывать не надо
Алексей1153 вне форума Ответить с цитированием
Старый 28.05.2020, 10:48   #8
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,536
По умолчанию

https://ru.wikipedia.org/wiki/Система_счисления
Читать, читать до полного понимания разницы между числом и цифрой.
Для упражнения: запишите в 20-ричной системе число дней в году и предложите ТСу перевести его в десятичную.
На этом я выхожу из темы, мне за ликбез не платят.
digitalis вне форума Ответить с цитированием
Старый 28.05.2020, 10:48   #9
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

например (разряды разделены палками)

9|19|10|13|0 - 20-ричное число

15|7|14||0|13 - 16 ричное (или, как человеку более привычно F7E0D )
Алексей1153 вне форума Ответить с цитированием
Старый 28.05.2020, 10:48   #10
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
мне за ликбез не платят
я и не прошу денег - делюсь бесплатно
Алексей1153 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика и системы счисления (программа перевода из двоичной (вводимое число до 100 знаков) в другую СС (4-19) [C++] Virts Помощь студентам 0 10.10.2014 19:07
Преобразовать заданное целое число из p - ичной системы счисления в q - ичную Wedmochka Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2012 14:00
Ввести число типа unsigned long. Распечатать в десятичной, двоичной и шестнадцатеричной системе счисления gas777 Общие вопросы C/C++ 5 03.06.2011 09:19
Дано число в двоичной системе счисления. Проверить правильность ввода этого числа isus Помощь студентам 2 29.11.2009 23:32