本题要求实现一个函数,将非负整数n转换为二进制后输出。
本题要求实现一个函数,将非负整数n转换为二进制后输出。函数接口定义:
void dectobin( int n );
函数dectobin应在一行中打印出二进制的n。建议用递归实现。
裁判测试程序样例:
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
/* 你的代码将被嵌在这里 */
这题用递归和不用递归分别怎么写 使用递归实现:
#include <stdio.h>
void dectobin(int n) {
if (n == 0) {
return;
}
dectobin(n / 2);
printf("%d", n % 2);
}
int main() {
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
不使用递归实现:
#include <stdio.h>
void dectobin(int n) {
int binary;
int i = 0;
while (n > 0) {
binary[ i] = n % 2;
n = n / 2;
i++;
}
for (int j = i - 1; j >= 0; j--) {
printf("%d", binary);
}
}
int main() {
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
在递归实现中,我们使用递归函数将整数n除以2,直到n为0,然后倒序输出余数即可得到二进制表示。在非递归实现中,我们使用一个数组来保存每次除以2的余数,然后倒序输出该数组即可得到二进制表示。 使用递归实现
#include <iostream>
using namespace std;
void dectobin(int n) {
if (n > 1) {
dectobin(n / 2);
}
cout << n % 2;
}
int main() {
int n;
cin >> n;
dectobin(n);
return 0;
}
在递归解决方案中,我们定义了一个名为 dectobin 的函数,该函数将整数 n 作为输入参数。如果 n 大于1,则递归地调用 dectobin 函数并传入 n/2 作为参数。然后,打印 n 对2取余的结果,即二进制位的值。
不使用递归实现
#include <iostream>
using namespace std;
void dectobin(int n) {
int binary; // 存储二进制位的数组
int i = 0;
while (n > 0) {
binary = n % 2;
n = n / 2;
i++;
}
for (int j = i - 1; j >= 0; j--) {
cout << binary;
}
}
int main() {
int n;
cin >> n;
dectobin(n);
return 0;
}
在非递归解决方案中,我们使用一个数组 binary 来存储二进制位的值。通过循环将 n 对2取余并更新 n 和数组 binary,直到 n 变为0。然后,从数组的末尾开始遍历并打印二进制位的值。
这两个解决方案都能将非负整数转换为二进制并按照要求进行输出。
希望这些解决方案对你有帮助。如果你还有其他问题,请随时提问。
页:
[1]