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

работа с записью числа в шестнадцатеричной сс - C++

Восстановить пароль Регистрация
 
DiRoya
Сообщений: n/a
04.11.2012, 14:54     работа с записью числа в шестнадцатеричной сс #1
Доброго времени суток. Помогите, пожалуйста, с лабораторкой.
На ввод даётся целое число. Необходимо проверить, является ли запись этого числа в шестнадцатеричной системе счисления палиндромом(палиндром - число, которое имеет одинаковое чтение слева направо и справа налево).
Каким образом можно это реализовать?
Банальное представление это числа в 16-ричной СС (cout << hex << n, как я понимаю, не поможет.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2012, 14:54     работа с записью числа в шестнадцатеричной сс
Посмотрите здесь:

Побитовые операции, работа с шестнадцатеричной записью C++
C++ Текст является десятичной записью числа, кратного 9
C++ В заданном массиве натуральных чисел заменить все числа на такие числа, которые получаться из исходного записью его цифр в обратном порядке
C++ Определить, является ли текст десятичной записью числа, кратного 9
Определить, является ли текст шестнадцатеричной записью числа, кратного 5 (Pascal -> C++) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zvoronz
 Аватар для zvoronz
270 / 237 / 21
Регистрация: 29.05.2012
Сообщений: 889
04.11.2012, 16:12     работа с записью числа в шестнадцатеричной сс #2
Можно как то вот так. Проверяется 32-х битное число на полиндромность.

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
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <vector>
 
int _tmain(int argc, _TCHAR* argv[])
{   
    int mask = 0xF0000000;
    int n;
    std::cout << "n = ";
    std::cin >> n;
    int start = 8;
 
    for(int i = 0; i < 8; ++i)
    {
        if((n & mask) == 0)
        {
            mask >>= 4;
            mask &= 0x0FFFFFFF;
            --start;
        }
        else break;     
    }
 
    int mask2 = 0x0000000F; 
    bool polyndrome = true;
 
    for(int i = 0, j = start; (i < j) && polyndrome; ++i, --j)
    {
        if(((n & mask) >> ((j-1)*4)) != ((n & mask2) >> (i*4))) polyndrome = false;
        mask >>= 4;
        mask2 <<= 4;
    }
 
    std::cout << std::hex << n << ((polyndrome)?" is polyndrome" : " is not polyndrome") << std::endl;
 
        return 0;
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
04.11.2012, 18:40     работа с записью числа в шестнадцатеричной сс #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdio>
#include <cstring>
 
int main()
{
    size_t n = 0xabcba;
    char s[32], *pa = 0, *pb = 0;
    sprintf(s, "%x", n);
    for(pa = s, pb = s + strlen(s) - 1; (pa < pb) && (*pa == *pb); ++pa, --pb)
    ;
    puts((pa >= pb) ? "true" : "false");
    return 0;
}
DiRoya
Сообщений: n/a
04.11.2012, 19:30     работа с записью числа в шестнадцатеричной сс #4
а можно решить данную задачу, не используя строки?
AlexeiZverev
0 / 0 / 0
Регистрация: 28.11.2012
Сообщений: 2
28.11.2012, 19:56     работа с записью числа в шестнадцатеричной сс #5
Цитата Сообщение от DiRoya Посмотреть сообщение
а можно решить данную задачу, не используя строки?
дай свой контакт, скину тебе туда
Yandex
Объявления
28.11.2012, 19:56     работа с записью числа в шестнадцатеричной сс
Ответ Создать тему
Опции темы

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