Как написать программу, которая принимает от пользователя целое число в
диапазоне от 0 до 100000 и выводит это число по цифрам через пробел?
Решение задачи реализовать с помощью конструкции switch.
Другие языки программирования и технологии
Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
#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");
}
#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");
}
#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;
}
#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;
}
Вообще-то решение с помощью switch - по моему худший из всех возможных вариантов.
Такие задачи решаются делением на 10 по модулю.
Если на простом примере, то 23 - это вывод 23/10=2 + пробел + 23%10=3
Такие задачи решаются делением на 10 по модулю.
Если на простом примере, то 23 - это вывод 23/10=2 + пробел + 23%10=3
Разбить на цифры - остаток от деления на 10
Вывести цифру ( можно и через switch, только зачем? )
Или предлагается
switch(num)
{
case 0: cout<<"0";break;
case 1: cout<<"1";break;
....
case 100000:cout<<"1 0 0 0 0 0";break;
}
сто тысяч строк??
Вывести цифру ( можно и через 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;
}
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);
}
#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);
}
Похожие вопросы
- Помогите!! C ++ Вводится число от 1...999. Вывести данное число на естественном языке. Например, 52 – пятьдесят два.
- Нужна помощь в решении задачи по С++ связанная с матрицами
- Информатика. Помощь в решении задач по массивам
- Необходима помощь в решении задачи. C++
- Помогите с решением задачи на C++
- Помогите пожалуйста оптимизировать решение задачи (Зайчик) на C++
- Помощь в решение задачи на PROLOG
- Дано натуральное число n. Найти и вывести все числа в интервале от 1 до n -1, у которых произведение всех цифр совпадает
- напишите пожалуста решение задачи В строчке между двумя пробелами вставить запятую(язык паскаль)
- Недавно начал изучать программирование (не с полного нуля), но мои решения задач слишком громоздкое, это нормально?
{
cout << num%10 << " ";
num /=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 <<
default:
cout << "Число больше 100000" << endl;