Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/19: Рейтинг темы: голосов - 19, средняя оценка - 5.00
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,638
1

Вывод числа с разбитием на разряды (cout)

11.11.2015, 11:27. Показов 3387. Ответов 12
Метки нет (Все метки)

Добрый время суток!

Вот чую зря создавал новую тему но все же...

Вот хоть убейте не помню как сделать таким образом что бы:
число 123456789
вывод 123 456 789

Не подскажите?

Добавлено через 58 секунд
Там как то очень просто, но интернет на это такую чушь выдает!!!

Добавлено через 3 минуты
Да и еще коль завели разговор про cout. В чистых сях был такой ключик, как "Cod\13". На сколько помню он поднимал "каретку" на одну позицию вверх и переписывал уже имеющую строчку. В с++ есть что то похожее?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2015, 11:27
Ответы с готовыми решениями:

Cout вывод числа в двоичной и шестнадцатеричной системе счисления
Помогите пожалуйста. Как сделать чтобы выводило не... 1 = 100000000000000000000000000000001, а...

Поменять местами 8.5.3.2 - разряды первого числа с 0.1.6.7 с разрядами второго числа (tasm)
Даны два числа в двоичном виде. Поменять местами 8.5.3.2 - разряды первого числа с 0.1.6.7 с...

Получить последние разряды десятичного числа из 4 байт изначального 8 байтного числа
Здравствуйте. Подскажите пожалуйста В наличии long к примеру start = 8842334613 количество знаков...

Установить 1 - 3 разряды. Инвертировать 4 - 7. Сдвинуть влево на 3 разрядов циклически. Сбросить 1,5 разряды
Установить 1 - 3 разряды. Инвертировать 4 - 7. Сдвинуть влево на 3 разрядов циклически. Сбросить...

12
Dimension
584 / 452 / 223
Регистрация: 08.04.2014
Сообщений: 1,710
11.11.2015, 11:37 2
если чисто с числами работать то можно таk
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <bits/stdc++.h>
using namespace std;
int revers(int a) {
    int b=0;
    while (a) {
        b = b * 10 + a % 10;
        a /= 10;
    }
    return b;
}
int Len(int a) {
    int l = 0;
    while (a)
        a /= 10, l++;
    return l;
}
int main() {
    int a,len;
    cin >> a;
    a = revers(a);
    //cout << a << endl;
    len = Len(a);
    int k=1;
    for (int i = 0;i < len ;i++) {
        for (int j = 0;j < 3;j++) {
            cout << (a / k) % 10;
            k *= 10;
            i++;
        }
        cout << " ";
    }
    cin.get(), cin.get();
    return 0;
}
0
Эксперт C
26069 / 16259 / 3494
Регистрация: 24.12.2010
Сообщений: 35,631
11.11.2015, 11:42 3
Цитата Сообщение от Mesteriis Посмотреть сообщение
Не подскажите?
Переводите число в 1000-ричную систему счисления и выводите циферки через пробел.

Добавлено через 52 секунды
В формате " %03d" (кроме первой)
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,638
11.11.2015, 12:07  [ТС] 4
Байт, Dimension, Спасибо впринцепе помогли.
Цитата Сообщение от Байт Посмотреть сообщение
В формате " %03d" (кроме первой)
не понял, это ты о чем?
0
Эксперт C
26069 / 16259 / 3494
Регистрация: 24.12.2010
Сообщений: 35,631
11.11.2015, 12:12 5
Цитата Сообщение от Mesteriis Посмотреть сообщение
не понял, это ты о чем?
Ну, это если printf-ом выводить. У cout тоже есть всякие форматы, precession и прочая, но я их не помню, ибо не пользуюсь. А принтфовский формат
C
1
printf(" %03d", n);
выводит пробел и за ним число с лидирующими нулями (до 3-х штук)
0
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,638
11.11.2015, 12:13  [ТС] 6
Байт, Ну как вариант, мерси
0
1453 / 790 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.11.2015, 12:52 7
Лучший ответ Сообщение было отмечено DrOffset как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <locale>
 
struct space_out : std::numpunct<char> {
    char do_thousands_sep()   const { return ' '; }  // separate with spaces
    std::string do_grouping() const { return "\3"; } // groups of 1 digit
};
 
int main()
{
    std::cout << "default locale: " << 123456789 << '\n';
    std::cout.imbue(std::locale(std::cout.getloc(), new space_out));
    std::cout << "locale with modified numpunct: " << 123456789 << '\n';
}
3
599 / 237 / 69
Регистрация: 08.08.2015
Сообщений: 1,638
11.11.2015, 15:50  [ТС] 8
DiffEreD, Глупый вопрос но всеже, а как потом опять включить обычный вывод?
0
1453 / 790 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
11.11.2015, 16:31 9
C++
1
std::cout.imbue(std::locale());
Добавлено через 31 минуту
Но наверно лучше так поступить:
C++
1
2
3
4
5
6
7
8
int main()
{
   std::ostream my_out(std::cout.rdbuf());
   my_out.imbue(std::locale(std::cout.getloc(), new space_out));
 
   std::cout  << 12345678 << '\n';
   my_out  << 12345678 << '\n';
}
1
из племени тумба-юбма
2115 / 1515 / 326
Регистрация: 29.11.2015
Сообщений: 7,160
Записей в блоге: 13
02.02.2021, 04:08 10
Тоже нужно было как то, но только для Си и ничего не смог найти. В общем кому надо, тот и тут найдет, а в Сишной ветке такой темы нет.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <math.h>
#include <stdio.h>
#define printf __mingw_printf //для long long for Windows GCC
#define scanf __mingw_scanf //тоже самое
 
int len; //нужна для печати посл.разряда без разделителя(')
 
void digit(long long x, int l)
{
    if(l > 0)
        digit(x/1000, l-3); //шаг по 3 разряда, начиная с конца
    if(l > 3) // пока не первые 3 разряда, вывод без минуса
        printf(len==l ? "%lld" : "%lld'", x>0 ? x%1000 : -x%1000);
    else if(l > 0) printf("%lld'", x%1000); // а здесь минус
}
 
int main(void)
{
    long long x;
    scanf("%lld", &x);
    len = x > 0 ? log10(x)+1 : log10(-x)+1;
//    printf("%d digits\n", len); // проверка длины числа
    if(len < 4) printf("%lld", x); // если число короче 4 сразу вывод
    else digit(x, len);
return 0;
}
Сделал спецом комменты, чтоб легче было разобраться.
0
608 / 459 / 269
Регистрация: 24.02.2017
Сообщений: 1,657
02.02.2021, 09:54 11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
void discharge (int d)
{
    if(d){
        discharge (d/1000);
         std::cout<<d%1000<<" "; 
    }
}
int main()
{
    int n = 123456789;
    discharge (n);
    return 0;
}
1
Любитель чаепитий
3586 / 1686 / 519
Регистрация: 24.08.2014
Сообщений: 5,705
Записей в блоге: 1
02.02.2021, 16:03 12
повар1, int n = -123456789;.
-123 -456 -789. D:
0
Модератор
Эксперт CЭксперт С++
4661 / 4192 / 767
Регистрация: 07.10.2015
Сообщений: 8,664
02.02.2021, 16:11 13
GbaLog-, кто мешает сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
void discharge (int d)
{
    if (d) {
        discharge (d / 1000);
        std::cout << d % 1000 << " ";
    }
}
void discharge1(int d)
{
    if (d < 0)
    {
        std::cout << "-";
        d *= -1;
    }
    discharge(d);
}
 
int main()
{
    int n = -123456789;
    discharge1 (n);
    return 0;
}
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2021, 16:11

Вывести на экран монитора цифру к-того разряда целого числа. Разряды числа пронумерованы справа налево, начиная с единицы
Выручайте пожалуйста :( 1.Вывести на экран монитора цифру к-того разряда целого числа. Разряды...

Разряды числа
Уважаемые, появилась проблема: в PascalABC.NET надо разбить 8-ми значное число по разрядам, никак...

Разбиение числа на разряды
Delphi. При вводе числа в edit оно должно разбиваться на разряды. Например, 123456789 и должно...

Разделение числа на разряды
Подскажите,алгоритм программы,которая выполняет разделение числа на разряды. Т.е вводится...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.