Перевод чисел в различные системы счисления

Задачи и их решения / Перевод чисел в различные системы счисления

 

Онлайн перевод дробных чисел из десятичной системы счисления

Введите число:
Введите основание системы счисления:


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

 
Реализация на 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
#include <iostream>
#include <iostream>
using namespace std;
// Отображение шестнадцатеричной цифры
char digit(int num)
{
  switch (num) {
  case 0: return '0';
  case 1: return '1';
  case 2: return '2';
  case 3: return '3';
  case 4: return '4';
  case 5: return '5';
  case 6: return '6';
  case 7: return '7';
  case 8: return '8';
  case 9: return '9';
  case 10: return 'A';
  case 11: return 'B';
  case 12: return 'C';
  case 13: return 'D';
  case 14: return 'E';
  case 15: return 'F';
  }
}
// Получение целой части числа
int dectox_int(int a, int p, char *s)
{
  int num = (int)a;
  int rest = num % p;
  num /= p;
  if (num == 0)
  {
    s[0] = digit(rest); return 1;
  }
  int k = dectox_int(num, p, s);
  s[k++] = digit(rest);
  return k;
}
// Получение дробной части числа
void dectox_double(double a, int p, char *s)
{
  int iter = 0;
  int k = 0;
  double a1 = a;
  do {
    a1 = a1 * p;
    int num = (int)(a1);
    s[k++] = digit(num);
    a1 -= (int)a1;
    iter++;
  } while (a1 > 0.00000001 && iter < 10);
  s[k] = '\0';
}
int main()
{
  double a;
  char s[80] = { 0 };
  int p;
  system("chcp 1251");
  system("cls");
  cout << "Введите число: ";
  cin >> a;
  cout << "Введите основание системы счисления: ";
  cin >> p;
  int k = dectox_int((int)a, p, s);
  s[k++] = ',';
  dectox_double(a — (int)a, p, &s[k]);
  cout << s;
  cin.get(); cin.get();
  return 0;
}

 
Результат выполнения
Перевод чисел в различные системы счисления


Назад: Задачи и их решения

Комментариев к записи: 6

  • есть двоичная, десятеричная, шестнадцатеричная система счисления, в какую вы переводите я не пойму

    • В систему с заданным основанием. Если ввели основание 2, то в двоичную. Если ввели основание 16, то в шестнадцатеричную. Исходное число представлено в десятичной системе счисления.

  • Пользователь
    Ошибка: 68:3: error: stray '\342' in program 68:3: error: stray '\200' in program 68:3: error: stray '\224' in program In function 'int main()': 68:24: error: expected primary-expression before 'int' 68:27: error: 'a' cannot be used as a function In function 'char digit(int)': 25:1: warning: control reaches end of non-void function [-Wreturn-type] Что делать..?

  • НИКОЛАЙ
    Простите, пожалуйста. Но у меня не получается на подобии вашей программы составить свою, которая бы переводила дробную часть. (Тестировал вашу программу, она вместо дробной части выводит 0) подскажите, пожалуйста, что делать

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *