Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
#1

Вывод числа в столбик с первой цифры, без массива, без строк - C++

28.07.2014, 20:15. Просмотров 2636. Ответов 23
Метки нет (Все метки)

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
#include <iostream>
#include <math.h>
using namespace std;
void p(long a)
{ 
long i=0,z=a;
    while (z)
    {
       z/=10;  
       i++; //êîëè÷åñòâî öèôð ГўГ® ââåäåГ*Г*îì ÷èñëå 
    } 
    
    for (i;i>0;i--)
      {
        cout<<abs(a/(long (pow(10,i-1)))%10)<<endl; 
        }
    
}
int main(void)
{ 
     setlocale (0,""); long  n;
     cout<<"n="; cin>>n;
     p(n);
     system ("PAUSE");
}
подскажите , что у меня не правильно?

Добавлено через 1 минуту
задание: напишите процедуру, которая выводит на экран в столбик все цифры переданного ей числа, начиная с первой
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.07.2014, 20:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод числа в столбик с первой цифры, без массива, без строк (C++):

Вывод числа в столбик (без использования строковых переменных) - C++
Дано натуральное число N. Не используя строковые переменные, вывести в столбик это число. Для решения использовать функции целочисленного...

Вывести в столбик цифры введённого числа, начиная с первой - C++
Напишите программу, которая выводит в столбик цифры введённого числа, начиная с первой. Используйте процедуру. Входные данные ...

Определить цифры целого числа (тип числа - целое без знака) - C++
Определить цифры целого числа( тип числа-целое без знака), вычислить сумму полученных цифр. Помогите ,пожалуйста.

Вывести в цикле те цифры числа, которые не делятся на 3 без остатка. - C++
Вывести только те цифры числа, которые не делятся на 3 без остатка.

Без операторов цикла вывести цифры числа через пробел - C++
Решить не используя операторы цикла. Дано натуральное число N. Выведите все его цифры по одной, в обычном порядке, разделяя их пробелами...

Найти сумму цифр заданного числа без учёта последней цифры через цикл while - C++
У меня есть код программы: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; void main() { int n,s; printf(&quot;n= \n&quot;); scanf(&quot;%d&quot;,&amp;n); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
28.07.2014, 20:27 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
void p(long a)
{ 
   int digits[32];
   int N=0;//количество цифр во введенном числе 
    while (a)
    {
         digits[N++]=a%10;
          a/=10;  
    } 
    for (int i=N-1;i>=0;i--)
         cout<<digits[i]<<endl; 
    
}
1
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
28.07.2014, 20:31  [ТС] #3
а без массива?
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
28.07.2014, 20:31 #4
Вот откопал свой старый код, только в нем выводил числа через пробел.
Ваш не запускал, точно указать на ошибку не могу. Предполагаю, что проблема в выводе первого/последнего значения?

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
using namespace std;
 
void cleave(int);
 
 
int main()
{
    int x;
 
    cout << "Vvedite celoe chislo ot 1 do 32767: ";
    cin >> x;
    cleave(x);
    cout << endl;
    system("pause");
    return 0;
}
 
void cleave(int volume)
{
    int x = volume,
        m = 1,      // счетчик итераций
        rank = 1;   // разрядность числа
 
    do
    {
        rank *= 10;
        x /= 10;
 
    } while (x != 0);
 
    x = volume;
    rank /= 10;
 
    if (rank == 1)
        cout << x;
    else
    {
        for (rank; rank > 1; rank /=10)
        {
            if (m == 1)
                {
                    cout << x / rank << "  ";
                    rank *= 10;
                }
            else
                cout << (x % rank) / (rank / 10) << "  ";
            m++;
 
        }
    }
}
1
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
28.07.2014, 20:34  [ТС] #5
Мимино, запусти мой код, например, 123123 - рабатает, а если 9999999 почему то с какими - то разрядами беда (((
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
28.07.2014, 20:40 #6
Цитата Сообщение от arzhanok Посмотреть сообщение
Мимино, запусти мой код, например, 123123 - рабатает, а если 9999999 почему то с какими - то разрядами беда (((
а... так это ж:
long от -2 147 483 648 до 2 147 483 647
до этого предела все работает
1
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
28.07.2014, 20:43  [ТС] #7
даже 99999 не работает...
0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
28.07.2014, 20:45 #8
Цитата Сообщение от arzhanok Посмотреть сообщение
даже 99999 не работает...
У меня Ваш код работает нормально в пределах long. Только с самого начала выдавал ошибку вот тут:
C++
1
abs(a/(long (pow(10,i-1)))%10
--->
C++
1
abs(a/(long (pow(10.0,i-1)))%10
1
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2014, 20:49 #9
Цитата Сообщение от arzhanok Посмотреть сообщение
адание: напишите процедуру, которая выводит на экран в столбик все цифры переданного ей числа, начиная с первой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using namespace std;
 
int main(){
    int val = -25564885;
    int num = 0;
    for( int i = int(10E8); i; i /= 10)
    {
        if( (num = val / i) != 0 )
            cout<<num<<endl;
        val -= num*i;
        if( num < 0 )
            val *= -1;
    }
    return 0;     
}
http://codepad.org/v5hI3xeQ
Output:
-2
5
5
6
4
8
8
5
0
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
28.07.2014, 20:52  [ТС] #10
-=ЮрА=-, процедуру я и сам написал )) спасибо, просто я бы хотел ошибку свою найти

Добавлено через 54 секунды
Мимино, все проверил, код 1 в 1 совпадает, у меня не работает))
0
-=ЮрА=-
28.07.2014, 20:53
  #11

Не по теме:

Цитата Сообщение от arzhanok Посмотреть сообщение
-=ЮрА=-, процедуру я и сам написал )) спасибо, просто я бы хотел ошибку свою найти
- ошибка в самой концепции и неоптимальности

0
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
28.07.2014, 20:56 #12
Мимино, все проверил, код 1 в 1 совпадает, у меня не работает))
У меня вот так
0
Миниатюры
Вывод числа в столбик с первой цифры, без массива, без строк  
arzhanok
1 / 1 / 1
Регистрация: 10.07.2014
Сообщений: 38
28.07.2014, 20:58  [ТС] #13
-=ЮрА=-, можешь подсказать ошибку в коде? почему 12345 работает, а 99999 нет?

Добавлено через 1 минуту
Мимино, извини, мне пора, завтра отвечу
0
-=ЮрА=-
Заблокирован
Автор FAQ
28.07.2014, 21:05 #14
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
arzhanok, переделай свой код хотя бы так ( я не знаю как тебе объяснить что нужно вычислить старший разряд а потом его же вычисть, у тебя тут
Цитата Сообщение от arzhanok Посмотреть сообщение
abs(a/(long (pow(10,i-1)))%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
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <math.h>
using namespace std;
void p(long a)
{ 
    long i=a ? 0 : 1;//даже в нуле уже есть 1 на цифра
    long z=abs(a);
    while (z)
    {
       z/=10;  
       i++; //количество цифр во введенном числе 
    } 
    
    long div = (long)pow(10.0, 1.0*(i - 1));
    long num = 0;
    for (div; div; div /= 10)
    {
        num = a / div; 
        cout<<num<<endl; 
        a -= num*div;  
    }
    
}
int main(void)
{ 
     setlocale (0,""); 
    long  n = -128848;
    // cout<<"n="; cin>>n;
    cout<<"FIRST NUM : "<<endl;
     p(n);
    n = 256897;
    cout<<"SECOND NUM : "<<endl;
    p(n);
     system ("PAUSE");
}
http://codepad.org/aCr6bdf2
FIRST NUM :
-1
-2
-8
-8
-4
-8
SECOND NUM :
2
5
6
8
9
7
Disallowed system call: SYS_fork
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
28.07.2014, 21:14 #15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
for (div; div; div /= 10)
Красивее
C++
1
for(;;div/=10)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 21:14
Привет! Вот еще темы с ответами:

Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка - C++
Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка. ...

Посимвольная проверка строк без массива - C++
Всем доброго времени суток, собственно, сабж: Нужно проверить 2 строки посимвольно на наличие одинаковых элементов, но без использования...

Сравнение строк без учета имеющегося в строке числа - C++
Есть строка содержащая слово и через пробел число, потом еще одно слово. Число может быть абсолютно любым, самое главное чтобы оно было....

Оператор for, без if (Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает границы) - C++
Напишите программу, суммирующую числа в указанном пользователем диапазоне, но без оператора if, который устанавливает верхнюю и нижнюю...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.07.2014, 21:14
Ответ Создать тему
Опции темы

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