Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 62, средняя оценка - 4.73
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
#1

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

22.11.2011, 23:50. Просмотров 9885. Ответов 9
Метки нет (Все метки)

Здравствуйте, пишу программу перевода числа из Р-ичной системы счисления в Q-ичную. Столкнулся с такой вот проблемкой... При Q<10 все работает корректно, а вот при Q>10 вместо букв A,B,C,D.... выдаются цифры 10, 11, 12, 13.... соответственно, что само по себе естественно. Хочу сделать так: если остаток при целочисленном делении равен 10, 11, 12.... , то вместо цифр выдать на печать (или поместить в символьный массив) буквы А, В, С.... , а если остаток 0-9, то сделать то же самое, но уже не как с числами, а как с символами.
Вообщем суть: нужна функция преобразования ЧИСЛА в СИМВОЛ, т.е если есть число 5, то должен получиться символ "5".
Заранее благодарен!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2011, 23:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Преобразование числа в символ. (C++):

Преобразование числа в символ и определение размера, - C++
Вот что я написал: #include&lt;iostream&gt; #include&lt;cmath&gt; using namespace std; void main() { const int n=5; int M={8,2,3,4,5}; ...

Преобразование int в аналог этого числа как символ - C++
Как преобразовать например число 8 в символ '8', подскаживите плис

Преобразование из ASCII в символ - C++
Подскажите, есть двумерный массив, int Massiv={{'H','E','L','L','O'}, {'W','O','R','L','D'}}; после for (int...

Преобразование двоичного массива int в символ - C++
Здравствуйте. У меня вопрос. Как преобразовать числовой массив, в котором, к примеру, 8 элементов, в символ? В массиве только нули и...

Вывести строки, в которых символ «*» встречается не менее 2 раз и заменить символ «*» на символ «_» - C++
День добрый. Имеется условие лабы. Написать программу, в которой с клавиатуры вводится до 10 символьных строк. Вывести строки, в...

Преобразование числа - C++
Дано натуральное число. От этого числа отнимем суму его цыфр. От нового числа опять отнимем суму его цыфр. Так будем делать до тех пор,...

9
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
23.11.2011, 00:05 #2
Цитата Сообщение от BoBaH26 Посмотреть сообщение
Вообщем суть: нужна функция преобразования ЧИСЛА в СИМВОЛ, т.е если есть число 5, то должен получиться символ "5".
C
1
printf("%c", 5 + '0');
1
Сыроежка
Заблокирован
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;
1
BoBaH26
30 / 30 / 0
Регистрация: 02.12.2010
Сообщений: 255
23.11.2011, 00:28  [ТС] #4
Спасибо, только не очень разобрался с первым способом от easybudda. Можно поподробней?
Сыроежка, почему так делать надо: digit = '0' + number? Ведь у нас number - переменная целого типа. Ну и это не совсем понял 'A' + number - 10...
0
Сыроежка
Заблокирован
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", думаю, самостоятельно разберетесь.
0
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.
0
Сыроежка
Заблокирован
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
1
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
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 не выводит.
1
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", выдавал ошибку.
0
easybudda
Модератор
Эксперт CЭксперт С++
9693 / 5643 / 962
Регистрация: 25.07.2009
Сообщений: 10,848
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 немного не так.
0
23.11.2011, 11:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.11.2011, 11:49
Привет! Вот еще темы с ответами:

Преобразование в числа - C++
Добрый день! Подскажите пожалуйста, как можно сделать.. В функцию передается строка - fun(&quot;1/4&quot;) {...} Как можно получить отдельно...

Преобразование символов в числа - C++
Дан текст, имеющий вид: dl + d2 + ... + dn, где di — цифры. Вычислить записанную в тексте сумму.

Преобразование символов в числа - C++
Дан текст, имеющий вид: dl + d2 + ... + dn, где di — цифры. Вычислить записанную в тексте сумму. Долго ломаю голову но выходит фигня....

Преобразование символов в числа - C++
Дан текст. Определить, является ли он правильной десятичной записью целого числа.


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru