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