Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Fam69
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 3
1

Программа, преобразующая символы(цифры) в число

04.12.2016, 17:44. Просмотров 240. Ответов 5
Метки нет (Все метки)

Добрый день!
Изучаю книгу Страуструпа для начинающих.
Не получается написать нормальный код для следующий задачи (Глава 6, Задача 9):
"Напишите программу, считывающую цифры и составляющую из них целые числа. Например, число 123 считывается как последовательность символов1,2 и 3. Программа должна вывести на экран сообщение: “123 — это 1 сотня, 2 десятки и 3 единицы”. Число должно быть выведено как значение типа int. Обработайте числа, состоящие из одной цифры, двух, трех и четырех цифр. Подсказка: для того чтобы получить число5 из символа'5', вычтите из него символ '0', иначе говоря,'5'–'0'==5."
Вот мой код:

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
#include <std_lib_facilities.h>
 
int main()
{
    setlocale(LC_ALL, "rus");
    char ch;
    int number = 0;
    vector<char> num(4, 'X');
    int i = 0;
 
    while (i < 4)
    {
        cin >> ch;
        if (ch < '0' || ch > '9') break;
        number *= 10;
        num[i] = ch;
        ch -= '0';
        number += ch;
        ++i;
    }
 
    cout << number << " - это ";
    switch (i)
    {
    case 4: cout << num[0] << " тысяч(а), " << num[1] << " сотен(и), "
        << num[2] << " десяток и " << num[3] << " единиц(а)" << endl;
        break;
    case 3: cout << num[0] << " сотен, " << num[1] << " десяток и "
        << num[2] << " единиц" << endl;
        break;
    case 2: cout << num[0] << " десяток и " << num[1] << " единиц" << endl;
        break;
    case 1: cout << num[0] << " единиц(а)" << endl;
        break;
    default:
        cerr << "error"; break;
    }
    _getch();
    return 0;
 
}
Ничего лучше в голову не приходит, возможно есть более оптимальное решение задачи.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2016, 17:44
Ответы с готовыми решениями:

Программа, которая вводит число из пяти цифр, разделяет число на отдельные цифры
Напишите программу, которая вводит число из пяти цифр, разделяет число на...

Функция преобразующая строку двоичных цифр в целое десятичное число
Написать функцию преобразования строки двоичных цифр в целое десятичное число.В...

Дано целое положительное число. Вывести символы, изображающие цифры этого числа (в порядке справа налево). Заранее всем
Дано целое положительное число. Вывести символы, изображающие цифры этого числа...

Ввести число, занести его цифры в стек. Вывести в число, у которого цифры идут в обратном порядке
Ввести число, занести его цифры в стек. Вывести в число, у которого цифры идут...

не могу понять задачку. Даны натуральное число n и символы s1, s2,., sn. Получить символы, принадлежащие последовательности s1, s2,., sn, которые
Даны натуральное число n и символы s1, s2,..., sn. Получить символы,...

5
Fixer_84
1198 / 748 / 710
Регистрация: 30.04.2016
Сообщений: 2,498
04.12.2016, 17:56 2
Fam69, цифры числа можно получить так (правда порядок будет справа налево):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
using namespace std;
 
int main()
{
    int N;
    cout << "Введите число:" << endl;
    cout << "N = ";
    cin >> N;
    cout << "Цифры числа:" << endl;
    while (N > 0)
    {
        cout << N % 10 << endl;
        N /= 10;
    }
    system("pause");
    return 0;
}
P.S. Если нужен порядок слева направо можно использовать рекурсию...
0
Fam69
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 3
04.12.2016, 18:00  [ТС] 3
Вы не совсем поняли задание.
Нужно не число в цифры перевести. А наоборот, получить набор цифр в типе char и из них составить число.
Вводим '1', '2', '3'. Преобразуем в число типа int 123.
Так же у меня проблема с выводом результатов. Т.е. очень уж много кода для вывода результатов.
0
amaralikyr
68 / 66 / 66
Регистрация: 18.09.2015
Сообщений: 234
Завершенные тесты: 1
04.12.2016, 18:04 4
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
#include <iostream>
#include <string>
#include <deque>
using namespace std;
 
int main()
{
    string tmp;
    
    deque <int> digits;
 
    do
    {
        int x;
        cin >> x;
        if (x < 0) break;
        digits.push_back(x);
    } while (true);
 
    for (int i = 0; i < digits.size(); i++)
    {
        char dig[2];
        _itoa_s(digits[i], dig, 10);
        tmp += dig;
    }
 
    int a = stoi(tmp);
 
    cout << a << endl;
 
}
0
Harold
31 / 31 / 25
Регистрация: 11.04.2015
Сообщений: 128
Завершенные тесты: 2
04.12.2016, 18:37 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int x;
    vector <int> v;
    int S = 0;
    while (cin >> x)
        v.push_back(x);
    for (int i = 0; i < v.size(); i++)
    {
        S += (v[i] * pow(10, (v.size() - i)));
    }
    S = S / 10;
    cout << S << endl;
}
2
Fam69
0 / 0 / 0
Регистрация: 04.12.2016
Сообщений: 3
04.12.2016, 18:53  [ТС] 6
Harold, спасибо. Вот примерно это и нужно было.
0
04.12.2016, 18:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2016, 18:53

Получить число М, которое образуется из числа N путем замены последней цифры на значение наибольшей цифры
Помогите составить программу, пожалуйста! Вот условие: Дано натуральное число...

Образовать новое число, путём замены последней цифры на значение наименьшей цифры в записи исходного числа
Помогите доделать задачу, минимальную цифру нашёл, последнюю цифру нашёл,...

В десятичной записи числа 42*4* пропущены 2 цифры. Определите эти цифры, если известно, что число кратно 72.
Помогите,пожалуйста! С++


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

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

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