Я пишу эту программу, в которой нам нужно преобразовать ввод от пользователя из цифр в слова. Я написал всю программу. Единственная ошибка, с которой я сталкиваюсь, заключается в том, что когда я пишу, например, 4200, нули не появляются. Я новичок в C ++.

while (num > 0)
{
    rem = num % 10;
    sum = sum * 10 + rem;
    num = num / 10;
}
num = sum;

while (num > 0)
{
    rem = num % 10;
    switch (rem)
    {
        case 1 :
            cout << "One " ;
            break;
        case 2:
            cout << "Two " ;
            break;
        case 3:
            cout << "Three " ;
            break;
        case 4:
            cout << "Four " ;
            break;
        case 5:
            cout << "Five " ;
            break;
        case 6:
            cout << "Six " ;
            break;
        case 7:
            cout << "Seven "  ;
            break;
        case 8:
            cout << "Eight "  ;
            break;
        case 9:
            cout << "Nine "  ;
            break;
        case 0:
            cout << "Zero "  ;
            break;

Пожалуйста, помогите мне. Как мне тоже напечатать нули?

c++
0
Fatima Khan 27 Ноя 2021 в 20:09
Покажите, пожалуйста, весь код.
 – 
Calculuswhiz
27 Ноя 2021 в 20:17
Я не могу сказать наверняка без минимального рабочего примера, но похоже, что некоторая точка num становится нулевой, и программа завершается, потому что выходит из двух циклов while. Попробую выложить полный пример репродукции.
 – 
Antonio
27 Ноя 2021 в 20:17
1
Ваш первый цикл эффективно переписывает число справа налево, например, с поворотом. 123 в 321. Тот же цикл превращает 4200 в 0024, то же самое, что и 24. На этом этапе вы больше не можете сказать, было ли исходное число 42, 420 или 4200 - вы безвозвратно потеряли информацию. Такой подход не сработает.
 – 
Igor Tandetnik
27 Ноя 2021 в 20:24
Ребята, я в настоящее время новичок в C ++, так что если вы могли бы сделать его более простым для меня
 – 
Fatima Khan
27 Ноя 2021 в 20:31

2 ответа

Лучший ответ

Ваше решение не оптимально. Итак, я написал новое решение.

Решение

int num;
cin >> num;
vector<string> v;

while (num > 0) {
    switch (num % 10) {
        case 1:
            v.push_back("One");
            break;
        case 2:
            v.push_back("Two");
            break;
        case 3:
            v.push_back("Three");
            break;
        case 4:
            v.push_back("Four");
            break;
        case 5:
            v.push_back("Five");
            break;
        case 6:
            v.push_back("Six");
            break;
        case 7:
            v.push_back("Seven");
            break;
        case 8:
            v.push_back("Eight");
            break;
        case 9:
            v.push_back("Nine");
            break;
        case 0:
            v.push_back("Zero");
            break;
    }
    num /= 10;
}
reverse(v.begin(), v.end());
for (auto a: v) cout << a << " ";

Вы также можете использовать map вместо switch.
Если возникнут ошибки, попробуйте написать #include <vector>.

Очень простое решение

int num;
cin >> num;
string s;
while (num > 0) {
    switch (num % 10) {
        case 1:
            s = "One " + s;
            break;
        case 2:
            s = "Two " + s;
            break;
        case 3:
            s = "Three " + s;
            break;
        case 4:
            s = "Four " + s;
            break;
        case 5:
            s = "Five " + s;
            break;
        case 6:
            s = "Six " + s;
            break;
        case 7:
            s = "Seven " + s;
            break;
        case 8:
            s = "Eight " + s;
            break;
        case 9:
            s = "Nine " + s;
            break;
        case 0:
            s = "Zero " + s;
            break;
    }
    num /= 10;
}
cout << s;
0
Ratery 27 Ноя 2021 в 20:41
Привет, спасибо за ответ, но я новичок в C ++, так что если вы сделаете это проще. Так как я новичок.
 – 
Fatima Khan
27 Ноя 2021 в 20:36
Хорошо, я отредактировал свой ответ и добавил новое решение.
 – 
Ratery
27 Ноя 2021 в 20:41
Вам это понятно?
 – 
Ratery
27 Ноя 2021 в 20:46
Почему вы увеличиваете s
 – 
Fatima Khan
27 Ноя 2021 в 21:32
s - это наш результат. Я просто вставляю цифру в начало s.
 – 
Ratery
27 Ноя 2021 в 21:36

Если ваша цель - просто преобразовать цифры как есть в слова, есть гораздо более простой подход:

string input;
cin >> input;

for (char ch : input)
{
    switch (ch)
    {
        case '1':
            cout << "One " ;
            break;
        case '2':
            cout << "Two " ;
            break;
        case '3':
            cout << "Three " ;
            break;
        case '4':
            cout << "Four " ;
            break;
        case '5':
            cout << "Five " ;
            break;
        case '6':
            cout << "Six " ;
            break;
        case '7':
            cout << "Seven "  ;
            break;
        case '8':
            cout << "Eight "  ;
            break;
        case '9':
            cout << "Nine "  ;
            break;
        case '0':
            cout << "Zero "  ;
            break;
    }
}
0
Remy Lebeau 27 Ноя 2021 в 21:27