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

Сложение в двоичной системе счисления - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с памятью. (Незнаю как правильно назвать тему). http://www.cyberforum.ru/cpp-beginners/thread345119.html
Программа пример: #include <iostream> void main() { int a, b, c; std::cin >> a; std::cin >> b;
C++ Взаимодействие процессов Нужно написать задачу, в которой дано 10 процессов (там P1, P2, …, Р10, например) Функционирование и взаимодействие процессов следующее: • P1 (запускается пользователем): Запустить процессы P2, Р3,... http://www.cyberforum.ru/cpp-beginners/thread345116.html
Среда разработки на Symbian 9.1 C++
Доброго времени суток. У меня есть старый Nokia E61(qwerty с Os 9.1). Так вот, суть: Я хочу заниматься кодингом когда PC не рядом. Есть ли под среды symbian? (С++) КОМПИЛЯЦИЯ НЕ ОБЯЗАТЕЛЬНА,...
НОК для N чисел C++
//--------------------------------------------------------------------------- #include <stdio.h> #include <stdlib.h> ...
C++ Принятие русского шрифта в консоли http://www.cyberforum.ru/cpp-beginners/thread345078.html
Здрасте! Я написал програму, которая должна использовать русский шрифт, но она его не распознает. Для того, что бы она отображала русский текст, я добавил команду setlocale( LC_ALL,"Russian" ); но...
C++ Переменные среды Windows Как в c++ использовать переменные среды windows? Например я хочу открыть текстовый файл в каталоге C:\documents and settings\user\1.txt Переменная среда данного каталога выглядит вот так:... подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
25.08.2011, 14:45
Как вариант Си реализация сложения в двоичной системе
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <math.h>
 
char * num2bin(char * bin, unsigned long lnum);
char * add_bin(char * binA, char * binB, char * binC);
unsigned long bin2num(char * bin);
 
int main()
{
    unsigned long a, b;
    char * binA = (char *)malloc(sizeof(char));
    char * binB = (char *)malloc(sizeof(char));
    char * binC = (char *)malloc(sizeof(char));
    do
    {
        printf("\tEnter numbers:\r\n");
        printf("a = ");scanf("%u",&a);
        printf("b = ");scanf("%u",&b);
        printf("\tNumbers in binary:\r\n");
        printf("a = %s\r\n",binA = num2bin(binA, a));
        printf("b = %s\r\n",binB = num2bin(binB, b));
        printf("\tc = a + b in binary\r\n");
        printf("c = %s\r\n",binC = add_bin(binA, binB, binC));
        printf("c in decimial : %u\r\n",bin2num(binC));
        printf("\rCheck result in decimial\r\n");
        printf("a + b = %u\r\n", a + b); 
        printf("[Y/N] Y - enter new numbers\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
 
char * num2bin(char * bin, unsigned long lnum)
{
    int i = 0;
    if(bin != NULL)
    {
        do
        {
            bin[i] = '0';
            if(lnum%2)
                bin[i] = '1';
            lnum /= 2;
            if(0 < lnum)
                bin = (char *)realloc(bin,(1 + (i = i + 1))*sizeof(char));
        }
        while(0 < lnum);
        bin[i + 1] = '\0';
        bin = strrev(bin);
    }
    return &bin[0];
}
 
char * add_bin(char * binA, char * binB, char * binC)
{
    int i,j,n;
    if(
        binA != NULL && 
        binB != NULL && 
        binC != NULL
    )
    {
        n = strlen(binA);
        i = strlen(binB);
        if(i < n)
        {
            binB = (char *)realloc(binB,(n - i + 1)*sizeof(char));
            memcpy((void *)&binB[j = n - i],(void *)&binB[0],i);
            for(i = 0;i < j; i++)
                binB[i] = '0';
            binB[n] = '\0';
        }
        if(n < i)
        {
            binA = (char *)realloc(binA,(n - i + 1)*sizeof(char));
            memcpy((void *)&binA[j = n - i],(void *)&binA[0],i);
            for(i = 0;i < j; i++)
                binA[i] = '0';
            binA[n] = '\0';
        }
        binC = (char *)realloc(binC,(n + 1)*sizeof(char));
        for(i = 0,j = 0; i < n; i++)
        {
            if(binA[i] == '0')
            {
                if(binB[i] == '0')
                    binC[i + j] = '0';
                else
                    binC[i + j] = '1';
            }
            else
            {
                if(binB[i] == '0')
                    binC[i + j] = '1';
                else
                {
                    binC[i + j] = '0';
                    binC = (char *)realloc(binC, (1 + i + (j = j + 1))*sizeof(char));
                    binC[i + j] = '1';
                }
            }
        }
        binC[i + j] = '\0';
    }
    return &binC[0];
}
 
unsigned long bin2num(char * bin)
{
    int i,n;
    unsigned long num = 0;
    if(bin)
    {
        n = strlen(bin);
        for(i = n; 0 < i; i--)
        {
            if(bin[i - 1] == '1')
                num += pow(2,(n - i));
        }
    }
    return num;
}
PS:Программу тестировал мало, если будут баги пиши, но вроди считает норм(проверял XP-ным калькулятором)
0
Миниатюры
Сложение в двоичной системе счисления  
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru