Создать программу, которая после ввода чисел с клавиатуры, выводила бы их в разных системах счисления (а именно в 8, 10, 16)
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int main()
{
int a = 5;
float x = 2.78;
printf("a=%o\n", a);
printf("x=%o\n", x);
getchar();
return 0;
}
Вот код для 8-ричной системы счисления. На выходе получается непонятно что. В чем ошибка?
Ответы (1 шт):
Автор решения: Павел Ериков
→ Ссылка
Вот пример кода, который выводит число с плавающей точкой из 10-ричной с.с. в 8-ричную:
double number = 32.45f;
unsigned int decimal = number; //Отделяем целую часть
number -= decimal; //Получаем дробную часть
int accuracy = 5; //Точность
std::printf("%o.", decimal); //Выводим целую часть в 8-ричной с.с.
for (int i = 0; i < accuracy; ++i) {
unsigned int tmp = (number *= 8); //Умножаем дробную часть на 8 и получаем целую часть
cout << tmp; //Выводим целую часть
number -= tmp; //Получаем дробную часть
}
Так же можно воспользоваться функцией double modf(double x, double *iptr), которая разделяет число x, занося в *iptr целую и возвращая дробную часть.
Алгоритм точно такой же:
double number = 32.45f;
double decimal;
number = modf(number, &decimal);
int accuracy = 5;
std::printf("%o.", (unsigned int) decimal);
double tmp;
for (int i = 0; i < accuracy; ++i) {
number *= 8;
number = modf(number, &tmp);
cout << (unsigned int)tmp;
}
Результат выполнения программы в обоих случаях одинаковый:
40.34631