Как сделать так, чтобы ноль появлялся с левой стороны?

#c

Вопрос:

Я пишу эту программу, в которой нам нужно преобразовать вводимые пользователем данные из цифр в слова. Я написал всю программу целиком. Единственная ошибка, с которой я сталкиваюсь, заключается в том, что, когда я пишу, например, 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;
 

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

Комментарии:

1. Пожалуйста, покажите весь код.

2. Я не могу сказать наверняка без минимального рабочего примера, но похоже, что какая-то точка num становится нулевой, и программа завершается, потому что она выходит из двух while циклов. Я бы попробовал опубликовать полный пример воспроизведения.

3. Ваш первый цикл эффективно переписывает число справа налево, превращая, например, 123 в 321. Тот же цикл превращает 4200 в 0024, что то же самое, что и 24. На данный момент вы больше не можете сказать, был ли первоначальный номер 42, 420 или 4200 — вы безвозвратно потеряли информацию. Этот подход не сработает.

4. Ребята, в настоящее время я новичок в C , так что, если бы вы могли сделать его более простым для меня

Ответ №1:

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

Решение

 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;
 

Комментарии:

1. Привет , спасибо за ваш ответ , но я новичок в C , так что, если вы сделаете это проще. Так как я новичок.

2. Хорошо, я отредактировал свой ответ и добавил новое решение.

3. Почему вы увеличиваете s

4. s это наш результат. Я просто вставляю цифровое имя в начало s .

5. никаких » » в каждом случае, почему?

Ответ №2:

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

 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;
    }
}