Другие языки программирования и технологии

Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.

Как написать программу, которая принимает от пользователя целое число в
диапазоне от 0 до 100000 и выводит это число по цифрам через пробел?
Решение задачи реализовать с помощью конструкции switch.
Izograf Nicolai
Izograf Nicolai
96
#include <iostream>
#include <stack>
using namespace std;
char code(unsigned num) {
const auto ten = 10U;
char x = ' ';
switch (num % ten) {
case 0U: x = '0'; break;
case 1U: x = '1'; break;
case 2U: x = '2'; break;
case 3U: x = '3'; break;
case 4U: x = '4'; break;
case 5U: x = '5'; break;
case 6U: x = '6'; break;
case 7U: x = '7'; break;
case 8U: x = '8'; break;
case 9U: x = '9'; break;
default: break;
}
return x;
}
bool member(stack<char>& box, unsigned& num) {
const auto ten = 10U;
const auto space = ' ';
box.push(code(num));
if (num) num /= ten;
if (num) box.push(space);
else return false;
return true;
}
stack<char> shit_code(unsigned num) {
stack<char> box;
if (!member(box, num)) return box;
if (!member(box, num)) return box;
if (!member(box, num)) return box;
if (!member(box, num)) return box;
if (!member(box, num)) return box;
if (!member(box, num)) return box;
}
void print(stack<char>& box) {
cout.put(box.top());
box.pop();
if (!box.empty()) print(box);
}
int main() {
cout << ">>> ";
unsigned num;
cin >> num;
const auto limit = 100'000U;
if (num > limit) exit(0);
auto res = shit_code(num);
print(res);
cout.put('\n');
system("pause");
}
Бауржан Бисембин
Бауржан Бисембин
62 669
Лучший ответ
#include "iostream"
#include "cmath"
using namespace std;
int main()
{
int n;
cin >> n;
for(int x = (int)log10(n); x >= 0; cout << n / (int)pow(10, x) << ' ', n %= (int)pow(10, x--));
cin.get();
return 0;
}
MD
Murat Djoraev
97 551
Вообще-то решение с помощью switch - по моему худший из всех возможных вариантов.
Такие задачи решаются делением на 10 по модулю.
Если на простом примере, то 23 - это вывод 23/10=2 + пробел + 23%10=3
Юра Фукалов while(num)
{
cout << num%10 << " ";
num /=10;
}
Izograf Nicolai Я знаю, что худший, но так требуется в задании. На счет деления на 10 по модулю тоже знаю. Но ведь диапазон значений задать не возможно.
int z;
cin >> z;
switch (z)
{
case 0 - 9:
cout << z / 1 << endl; break;
case 10 - 99:
cout << z / 10 << " " << z % 10 << endl; break;
case 100 - 999:
cout << z / 100 << " " << (z / 10) % 10 << " " << z % 10 << endl; break;
case 1000 - 9999:
cout << z / 1000 << " " << (z / 100) % 10 << " " << (z / 10) % 10 << " " << z % 10 << "\n"; break;
case 10000 - 99999:
cout << z / 10000 << " " << (z / 1000) % 10 << " " << (z / 100) % 10 << " " << (z / 10) % 10 << " " << z % 10 << "\n"; break;
case 100000:
cout << z / 100000 << " " << (z / 10000) % 10 << " " << (z / 1000) % 10 << " " << (z / 100) % 10 << " " << (z / 10) % 10 << " " << z % 10 <<
Izograf Nicolai "\n"; break;
default:
cout << "Число больше 100000" << endl;
Хого Хого switch создает lookup table, так что не всё так плохо, кодогенерация рулит
Разбить на цифры - остаток от деления на 10

Вывести цифру ( можно и через switch, только зачем? )

Или предлагается
switch(num)
{
case 0: cout<<"0";break;
case 1: cout<<"1";break;
....
case 100000:cout<<"1 0 0 0 0 0";break;
}
сто тысяч строк??
Юра Фукалов А может
while(num)
{
switch(num%10)
{
case 0: cout << "0"; break;
...
...
case 9: cout << "9"; break;
}
num /= 10;
}
Юра Фукалов Смысла в этом switch правда не вижу...
можно и через switch:

#define switch(x) {int i=1;for(;i<=x;i*=10);for(i/=10;i>1;i/=10){printf("%d ",x/i%10);}printf("%d",x%10);}

void main()
{
switch(12345);
}
Иван Середа
Иван Середа
53 754