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

Преобразование числа в символ. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.73
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
22.11.2011, 23:50     Преобразование числа в символ. #1
Здравствуйте, пишу программу перевода числа из Р-ичной системы счисления в Q-ичную. Столкнулся с такой вот проблемкой... При Q<10 все работает корректно, а вот при Q>10 вместо букв A,B,C,D.... выдаются цифры 10, 11, 12, 13.... соответственно, что само по себе естественно. Хочу сделать так: если остаток при целочисленном делении равен 10, 11, 12.... , то вместо цифр выдать на печать (или поместить в символьный массив) буквы А, В, С.... , а если остаток 0-9, то сделать то же самое, но уже не как с числами, а как с символами.
Вообщем суть: нужна функция преобразования ЧИСЛА в СИМВОЛ, т.е если есть число 5, то должен получиться символ "5".
Заранее благодарен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.11.2011, 00:05     Преобразование числа в символ. #2
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Вообщем суть: нужна функция преобразования ЧИСЛА в СИМВОЛ, т.е если есть число 5, то должен получиться символ "5".
C
1
printf("%c", 5 + '0');
Сыроежка
Заблокирован
23.11.2011, 00:14     Преобразование числа в символ. #3
BoBaH26,

C++
1
2
3
4
char digit;
 
if ( number < 10 ) digit = '0' + number;
else digit = 'A' + number - 10;
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
23.11.2011, 00:28  [ТС]     Преобразование числа в символ. #4
Спасибо, только не очень разобрался с первым способом от easybudda. Можно поподробней?
Сыроежка, почему так делать надо: digit = '0' + number? Ведь у нас number - переменная целого типа. Ну и это не совсем понял 'A' + number - 10...
Сыроежка
Заблокирован
23.11.2011, 00:35     Преобразование числа в символ. #5
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Спасибо, только не очень разобрался с первым способом от easybudda. Можно поподробней?
Сыроежка, почему так делать надо: digit = '0' + number? Ведь у нас number - переменная целого типа. Ну и это не совсем понял 'A' + number - 10...
Вы задали вопрос о преобразовании числа в символ. '0' - это символ? 'A' - это символ? Разница во внутреннемс представлении символов '0' и '1' составляет значение 1. Поэтому, чтобы перейти от симвоа '0' к символу '1' нужно прибавить 1. Цифровые символы согласно стандарту языка располагаются в таблице кодов друг за другом. Поэтому чтобы от символа '0' перейти к символу '9' вам к символу '0' нужно прибавить 9. Поэтому если у вас есть остаток от деления на вашу базу, который меньше 10, чтобы получить символьное представление этого тостатка, нужно его прибавить к символу '0'.

'0' + 0 == '0'
'0' + 1 == '1'
'0' + 2 == '2'
...
'0' + 9 == '9'

С 'A", думаю, самостоятельно разберетесь.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
23.11.2011, 01:00  [ТС]     Преобразование числа в символ. #6
Спасибо, постараюсь с А разобраться..

Добавлено через 11 минут
Нашел в книге таблицу символов ASCII. По ней за символ "1" отвечает код 49, "2" - 50 и т.д. А за символ "А" - 65. Можно так попробовать: char s; s=49; А при печати будет выдавать 1.
Сыроежка
Заблокирован
23.11.2011, 01:03     Преобразование числа в символ. #7
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Спасибо, постараюсь с А разобраться..

Добавлено через 11 минут
Нашел в книге таблицу символов ASCII. По ней за символ "1" отвечает код 49, "2" - 50 и т.д. А за символ "А" - 65. Можно так попробовать: char s; s=49; А при печати будет выдавать 1.
Вам в s надо не 49 заносить, а преобразовать ваш тостаток от деления на базу в символьное представление. Если остаток равен 1, то надо в s заносить '0' + 1
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.11.2011, 02:23     Преобразование числа в символ. #8
BoBaH26, вообще на форуме примеров решения подобной задачи пруд пруди. Вот для затравки
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
 
void hex(unsigned num){
    if ( num ){
        hex(num / 16);
        printf("%c", "0123456789abcdef"[num % 16]);
    }
}
 
int main(void){
    unsigned num;
    
    while ( printf("\nNumber: ") && scanf("%u", &num) == 1 )
        hex(num);
    
    return 0;
}
На самом деле маргинальный вариант, просто для разнообразия. 0 не выводит.
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
23.11.2011, 10:57  [ТС]     Преобразование числа в символ. #9
Намного короче моей. Только я не понял, это же рекурсивный алгоритм? И вот эту строку:
printf("%c", "0123456789abcdef"[num % 16]); Тут выводим (num%16), который преобразуется к символу в соответствии с "0123456789abcdef"?

Добавлено через 7 минут
Зачем в scanf("%u", &num) == 1 писать "== 1"? Я scanf заменил на cin>>num, пришлось убрать "== 1", выдавал ошибку.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 11:49     Преобразование числа в символ.
Еще ссылки по теме:

Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_» C++
Преобразование числа в строку C++
Преобразование в числа C++

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
23.11.2011, 11:49     Преобразование числа в символ. #10
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Только я не понял, это же рекурсивный алгоритм?
Да. Если не использовать рекурсию, прийдётся сначала символы во временную строку копировать, а потом её реверсировать, иначе число будет задом на перёд выводиться.
Цитата Сообщение от BoBaH26 Посмотреть сообщение
И вот эту строку:
printf("%c", "0123456789abcdef"[num % 16]); Тут выводим (num%16), который преобразуется к символу в соответствии с "0123456789abcdef"?
Из строки "01234..." выводим символ с индексом [num % 16]
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Зачем в scanf("%u", &num) == 1 писать "== 1"? Я scanf заменил на cin>>num, пришлось убрать "== 1", выдавал ошибку.
scanf() возвращает количество присвоенных значений. Пока удаётся прочитать число из ввода и присвоить его переменной, возвращает 1, если ввести не число, цикл прервётся. С cin немного не так.
Yandex
Объявления
23.11.2011, 11:49     Преобразование числа в символ.
Ответ Создать тему
Опции темы

Текущее время: 12:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru