Jus*_*arr 1 c++ binary loops for-loop decimal
我的任务是编写一些代码,这些代码将接受用户输入并将数字转换为其二进制数。到目前为止,我已经编写了一些代码,但遇到了一个问题。我必须使用 for 循环和商余数方法。当我输出余数(二进制)时,它不会打印最后一位数字。
我要问的问题是:我必须在 for 循环中更改什么才能使其打印出二进制数的最后一位数字?
int main()
{
int num;
int rem;
cout << "Please enter a number: ";
cin >> num;
for (int i = 0; i <= (num + 1); i++)
{
num /= 2;
rem = num % 2;
cout << rem;
}
_getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助表示感谢,谢谢!
num当您开始除以2 的算法时,您会丢失最后一个二进制数。为避免此问题,您应该交换两条指令num /= 2;和rem = num % 2;
您的循环也迭代了太多次:实际上您可以在 时停止num == 0。以下代码对于 <= 0 的输入无效。
int main()
{
int num;
int rem;
cout << "Please enter a number: ";
cin >> num;
while (num != 0)
{
rem = num % 2;
num /= 2;
cout << rem;
}
cout << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你想以正确的顺序写入它,你应该首先计算以 2 为基数的数字的对数。以下解决方案使用index以“1”开头且后面有“0”的数字:
int main()
{
int num;
int rem;
cout << "Please enter a number: ";
cin >> num;
if (num > 0) {
int index = 1;
while (index <= num)
index *= 2;
index /= 2;
do {
if (num >= index) {
cout << '1';
num -= index;
}
else
cout << '0';
index /= 2;
} while (index > 0);
cout << std::endl;
}
else
cout << '0';
cout << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)