Причина, по которой вы получаете этот вывод, заключается в том, что каждый вызов printf("%d ", binary);
выводит на экран всю «двоичную» переменную, и эта переменная содержит число, а не отдельные цифры этого числа.
Самый простой способ получить доступ к определенным цифрам числа - сначала разделить его на некоторую степень 10, а затем получить mod10 этого числа, например:
int number = 6543;
int lastDigit = number % 10;
int secondLastDigit = (number / 10) % 10;
int thirdLastDigit = (number / 100) % 10;
Это работает, потому что деление целых чисел в C приводит клюбые дробные части должны быть пропущены, поэтому, если вы разделите 6543/10 (как в примере), вы не получите 654,3, но 654.
Вы можете создать функцию, которая будет возвращатьцифра числа из любой позиции, например, так:
int digitAt(int num, int pos)
{
// Divide num by 10^(pos - 1) to "shift" the number to the right
num /= pow(10, pos - 1);
// Return the last digit after the divisions
return num % 10;
}
Приведенная выше функция возвращает цифры, начинающиеся справа (pos 1 = последняя цифра, pos 2 = вторая последняя цифра)! Чтобы сделатьэта функция более интуитивно понятна, например, вы можете перевернуть число по горизонтали перед делением (123 становится 321).
Я немного коснулся, вернувшись к исходной вершинеIC.Чтобы достичь желаемой функциональности, вы можете написать свой код следующим образом (только цикл while):
while (n > 0)
{
remainder = num % 10;
decimal = decimal + remainder * base;
num = num / 10 ;
base = base * 2;
int binaryDigit = (binary / pow(10, n - 1)) % 10;
printf("%d ", binaryDigit);
n--;
}
Теперь причина, по которой вам не нужно беспокоиться о том, что ваши цифры читаются в обратном направлении (как впредыдущий пример функции) потому, что удобно, ваш итератор, n
, уже идет в обратном направлении («от n до 0» вместо «от 0 до n»), поэтому вы читаете крайние левые цифры передсамые правые.
Надеюсь, что это помогло.
[EDIT] Как указано в ответах, использование pow () в целочисленных операциях может привести к нежелательным результатам.Виноват.Существует множество способов достижения целочисленной степени 10, хотя такая функция, как
int powerOf10(int exp)
{
int num = 1;
while (exp > 0) {
num *= 10;
exp--;
}
return num;
}
, должна выполнять эту работу.