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

Перевод из одной системы счисления в другую - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ генератор кроссвордов http://www.cyberforum.ru/cpp-beginners/thread395998.html
Здравствуйте,все! Просьба помочь с созданием генератора кроссвордов, который будет брать слова из специальной базы. Идей нет вообще никаких. Прошу помочь и если возможно дать код, просто третий день...
C++ Комментарии к программе........ #include <iostream.h> #include <string.h> #include <stdio.h> #include <conio.h> #define N 5 int main() { int i,j; char x,y; puts("A nu-ka chirikni che te nada:\n"); http://www.cyberforum.ru/cpp-beginners/thread395994.html
Вывести рекуррентную формулу для вычисления суммы ряда C++
Помогите пожалуйста вывести рекуррентную формулу
C++ Являются ли элементы 1-го, квадратами элементов 2-го массива?
Даны 2 одномерных массива (вводятся с клавиатуры), проверить, являются ли элементы 1-го, квадратами элементов 2-го массива.
C++ Определить, сколько элементов массива попадает в интервал http://www.cyberforum.ru/cpp-beginners/thread395971.html
Определить сколько элементов массива попадает в интервалы от А до В с шагом (А-В)/5 Добавлено через 16 часов 31 минуту плиз. Помогите:(
C++ реккурентная функция #include "stdafx.h" #include <math.h> float rec(float n) { if (n==1)return 0; else return log(n/(sqrt(n))+rec(n-1)); } int _tmain(int argc, _TCHAR* argv) { printf ("vvedite seloe n \n"); подробнее

Показать сообщение отдельно
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
30.11.2011, 23:30
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>
 
int reverceBin(int num)
{
    int sum = 0;        //Искомое число
    int tmp = 1;        //Временная переменная, используется для сравнения с num
    while(tmp <= num)
    {
        if(tmp & num)   //Если в бинарном представлении чисел что-нибудь совпадает, то...
        {
            ++sum;
            break;
        }
        tmp <<= 1;      //Увеличиваем tmp в 2 раза
    }
    
    tmp <<= 1;          //Можно было запихнуть в if первого цикла, можно тут оставить, дело вкуса
    
    while(tmp <= num)   
    {
        sum <<= 1;      //Увеличиваем искомое число в 2 раза
        if(tmp & num)   //См. 1 цикл
            ++sum;
        tmp <<= 1;      //См. 1 цикл
    }
    return sum;
}
    
int main()
{   
    int n;
    while(std::cin >> n)
        std::cout << reverceBin(n) << std::endl;
    return 0;
}
С комментариями.

Логика программы: изначально пробегаемся по бинарному представлению числа num переменной tmp. Если там есть совпадающие биты(а они будут, если только num != 0), увеличиваем sum на единицу, и выходим из цикла. Не забываем увеличить tmp в 2 раза, т.к. в цикле мы этого не делаем. Заходим во второй цикл. Все то-же самое, но теперь еще sum увеличивается в 2 раза, и если биты совпадают, то прибавляем единицу к sum. Выводим sum.
Код
num = 10(d) = 1010(b)
1) tmp = 0001(b), 0001(b) & 1010(b) = false;
   tmp = 0010(b), 0010(b) & 1010(b) = true(заметили, в чем разница?) -> sum = 001(b), break;

tmp = 0100(b);

2) sum =  010(b), tmp = 0100(b), 0100(b) & 1010(b) = false;
   sum = 100(b), tmp = 1000(b), 1000(b) & 1010(b) = true -> ++sum, sum = 101(b) = 5(d);
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru