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

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

Войти
Регистрация
Восстановить пароль
 
niikiita
3 / 3 / 0
Регистрация: 29.05.2013
Сообщений: 223
#1

Шестнадцатиричная система - C++

18.06.2014, 20:31. Просмотров 195. Ответов 0
Метки нет (Все метки)

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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstring> 
 
using namespace std;
 
int main()
{ 
    int osn = 16;
    char bvector1[100];
    char bvector2[100];char rezult[100];
        cin >> bvector1 >> bvector2;
    int L1 = strlen(bvector1);
    for(int i = 0; i < L1; i++)
    {
        bvector1[i] -= '0';
    }
    int L2 = strlen(bvector2);
    for(int i = 0; i < L2; i++)
    {
        bvector2[i] -= '0';
    } 
    if (L1 != L2)
    {
        if (L1 > L2)
        {
            for (int i = 0; i < L2; i++)
            bvector2[L1-1-i] = bvector2[L2-1-i];
            memset(bvector2, 0, (L1-L2));
        }
        if (L2 > L1)
        {
            for (int i = 0; i < L1; i++)
            bvector1[L2-1-i] = bvector1[L1-1-i];
            memset(bvector1, 0, (L2-L1));
        }
    }
    int i;char carry, sum;
    int q;
    if (L1 > L2)
    q = L1;
    else q = L2;
    i = q - 1;
    carry = 0;
    int h;
    while (i >= 0)
    {
        sum = ((bvector1[i] >= 'A' && bvector1[i] <= 'F') ? 10 +  bvector1[i]-'A' : (bvector1[i] - '0')) + ((bvector2[i] >= 'A' && bvector2[i] <= 'F') ? 10 +  bvector2[i]-'A' : (bvector2[i] - '0')) + (carry >= 'A' && carry <= 'F') ? 10 + carry-'A' : (carry - '0');
        h = sum/osn;
        if (sum < osn) {rezult[i--] = sum;}
        else rezult[i--] = sum - osn;
        carry = h;
        if (rezult[L1 + i ] > 9)
            rezult[L1 + i ] = 'A' + rezult[L1 + i ] - 10;
        else rezult[L1 + i ] += '0';
    }
    
    rezult[L1 + L2] = '\0';
    for (i = 0; i < q; i++)
    {
        if (rezult[i] > 9)
            rezult[i] = 'A' + rezult[i] - 10;
        else rezult[i] += '0';
    }
    cout << rezult;
    return 0;
    system("Pause");
}
Должна складываеть два шестнадцатиричных числа, выдет всегда 99, помогите исправить

Добавлено через 2 часа 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
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cstring>      
 
using namespace std;
 
int main()
{   
    int osnovanie = 8;
    char bvector1[100];
    char bvector2[100];
    unsigned char rezult[100];;
        cin >> bvector1 >> bvector2;
    int L1 = strlen(bvector1);
    int L2 = strlen(bvector2);
    if (L1 != L2)
    {
        if (L1 > L2)
        {
            for (int i = 0; i < L2; i++)
                bvector2[L1-1-i] = bvector2[L2-1-i];
            memset(bvector2, 0, (L1-L2));
        }
        if (L2 > L1)
        {
            for (int i = 0; i < L1; i++)
                bvector1[L2-1-i] = bvector1[L1-1-i];
            memset(bvector1, 0, (L2-L1));
        }
    
    }
    int i;
    char carry, sum;
    int q;
    if (L1 > L2)
    q = L1;
        else q = L2;
    i = q - 1;
    carry = 0;
    int h;
    for (int i = 0; i < L1 + L2; i++) rezult[i] = 0;
    while (i >= 0)
    {
        sum = ((bvector1[i] >= 'A' && bvector1[i] <= 'F') ? 10 +  bvector1[i]-'A' : (bvector1[i] - '0')) - ((bvector2[i] >= 'A' && bvector2[i] <= 'F') ? 10 +  bvector2[i]-'A' : (bvector2[i] - '0')) - ((carry >= 'A' && carry <= 'F') ? 10 +  carry -'A' : (carry - '0'));
        h = sum/osnovanie;
        if (sum >= 0) 
        {
            rezult[i--] = sum;
            carry = 0;
        }
        else
        { 
            rezult[i--] = sum + osnovanie;
            carry = 1;
        }
        if (rezult[L1 + i ] > 9)
            rezult[L1 + i ] = 'A' + rezult[L1 + i ] - 10;
        else rezult[L1 + i ] += '0';
    }
    rezult[L1 + L2] = '\0';
    for (int i = 0; i < L1 ; i++)
    {
        if (rezult[i] > 9)
            rezult[i] = 'A' + rezult[i] - 10;
        else rezult[i] += '0';
    }
    cout << rezult;
    system("Pause");
    return 0;
}
Шестнадцатиричная система
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2014, 20:31     Шестнадцатиричная система
Посмотрите здесь:

C++ система классов
Двоичная система C++
C++ двоичная система
C++ Система счисления
C++ Система шумоочистки
C++ 3D система координат
Файловая система C++
C++ 16-ая система счисления
C++ Система типов
Система плагинов C++
C++ Система уравнений

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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