У меня возникают трудности с пониманием строки в программе преобразования десятичных чисел в двоичные
Хорошо, я знаю, что это глупый вопрос, поскольку он связан с реверсом цикла, но я изо всех сил пытаюсь это понять. Я даже пытался сделать отдельный оборот для программы цикла, чтобы очистить контекст, но у меня все еще проблемы.
Так вот мой код
#include<iostream>
using namespace std;
int main()
{
int i,d,j=0,b[100];
cin>>d;
while(d>0)
{
b[j]=d%2;
d=d/2;
j++;
}
//cout<<j;
for(i=j-1;i>=0;i--)
{
cout<<b[i];
}
}
Теперь, пожалуйста, объясните мне цикл. Почему это должно быть i=j-1;i>=0;i--
? Не может ли это быть i=j;i>0;i--
?
Когда я даю 109
в качестве ввода и использования i=j;i>0;i--
Я получаю 6946348110110
в качестве вывода, и если я использую i=j;i>=0;i--
тогда я получаю 69463481101101
Я новичок. Пожалуйста помоги!
1 ответ
В последний раз, когда выполняется цикл while, b[j]=d%2
добавим значение, скажем, в позицию 4 (b [0,1,2,3,4]). Переменная 'j' будет по-прежнему увеличиваться на единицу, чтобы завершить цикл, принимая значение 5. Таким образом, при запуске цикла 'for' вы получите вкладку, переходящую к 4, но значение 'j' равно 5, объясняя полезность использования i=j-1
, Теперь ваш цикл будет проверять значения [4,3,2,1,0] вместо [5,4,3,2,1], что не является точным.