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

Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
makc101
0 / 0 / 0
Регистрация: 26.12.2009
Сообщений: 9
05.05.2010, 00:40     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного #1
Задание: Дано целое неотрицательное число. Сформировать другое число, которое будет состоять только из четных восьмеричных цифр исходного числа.
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2010, 00:40     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного
Посмотрите здесь:

Определить состоит ли число только из четных цифр C++
C++ Инверсия двоичного представления четных восьмеричных цифр, входящих в состав числа
Сформировать из данного числа другое число, которое содержит только четные цифры (рекурсия) C++
Сформировать новый массив из четных чисел исходного C++
Заменить данное число на число, которое получается из исходного записью цифр в обратном порядке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
05.05.2010, 07:20     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main()
{
    int x;
    cin >> x;
    cout << "oct " << oct << x << '\n';
    int y=0;
    while (x > 0)
    {
        if (((x & 0x1) == 0) && ((x & 7)!=0))
        {
            y = y << 3;
            y= y+ (x & 7);
        }
        x=x >> 3;
    }
    // в числе-результате числа в обратном порядке тому к котором они встречаются в исходном числе
    cout << "result oct " << oct << y << '\n';
    return 0;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,691
05.05.2010, 09:21     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
//MS VS
#include "stdafx.h"
#include <iostream>
 
unsigned get_digits(unsigned x)
{
    unsigned res = 0;
    size_t count = 0;
    do
    {
        res += (x & 7) << (count++ * 3);
    }while(x >>= 6);
    return res;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    unsigned num;
    for(;;)
    {
        std::cout << "input num: ";
        std::cin >> num;
        std::cout 
            << "oct num = " 
            << std::oct 
            << num
            << std::endl        
            << "result = "                 
            << get_digits(num)
            << std::endl
            << std::endl;   
    }
    return 0;
}
Aye Aye
 Аватар для Aye Aye
367 / 281 / 36
Регистрация: 17.12.2009
Сообщений: 567
05.05.2010, 18:46     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного #4
Mr.X, такой тест введи: 341412.
result не верный. И зачем зацикливать?
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,691
05.05.2010, 22:32     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Aye Aye Посмотреть сообщение
Mr.X, такой тест введи: 341412.
result не верный. И зачем зацикливать?
У меня получилось:
input num: 341412
oct num = 1232644
result = 1364

А что здесь неверно?

Кстати, ваша программа дает такой результат:
341412
oct 1232644
result oct 44622

По-моему это неправильно.
А цикл исключительно для удобства, чтобы каждый раз не запускать программу.

Добавлено через 2 часа 38 минут
Может я неверно задание понял. Мне показалось, что нужно вывести цифры, стоящие на четном месте в восьмеричном числе, а нужно цифры, четные по значению?

Добавлено через 19 минут
Вот программа для вывода четных по значению восьмеричных цифр:
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
//MS VS
#include "stdafx.h"
#include <iostream>
 
unsigned get_digits(unsigned x)
{
    unsigned res = 0;
    size_t count = 0;
    unsigned cur_oct_dig;
    do
    {
        cur_oct_dig = x & 7;
        if(cur_oct_dig % 2 == 0)
        {
            res += cur_oct_dig << (count++ * 3);
        }
        
    }while(x >>= 3);
    return res;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    unsigned num;
    for(;;)
    {
        std::cout << "input num: ";
        std::cin >> num;
        std::cout 
            << "oct num = " 
            << std::oct 
            << num
            << std::endl        
            << "result = "                 
            << get_digits(num)
            << std::endl
            << std::endl;   
    }
    return 0;
}
Yandex
Объявления
05.05.2010, 22:32     Сформировать число, которое будет состоять только из четных восьмеричных цифр исходного
Ответ Создать тему
Опции темы

Текущее время: 19:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru