2025-03-09 学习记录--C/C++-PTA 习题10-7 十进制转换二进制
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
一、题目描述 ⭐️
裁判测试程序样例:
#include <stdio.h>
void dectobin( int n );
int main()
{
int n;
scanf("%d", &n);
dectobin(n);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例
10
输出样例
1010
二、解题思路 ⭐️
三、代码(C语言)⭐️
方法一、非递归实现 🍭
void dectobin(int n) {
if (n == 0) { // 如果输入的整数 n 为 0
printf("0"); // 直接输出 "0",因为 0 的二进制表示就是 0
return; // 结束函数
}
int numArr[255]; // 定义一个数组 numArr,用于存储二进制数的每一位(最大支持 255 位)
int cnt = 0; // 定义一个计数器 cnt,用于记录二进制数的位数
while (n != 0) { // 当 n 不为 0 时,循环计算二进制位
numArr[cnt] = n % 2; // 将 n 对 2 取余的结果(0 或 1)存入数组 numArr
cnt++; // 计数器 cnt 加 1,表示二进制位数增加
n /= 2; // 将 n 除以 2,继续计算下一位
}
for (int i = cnt - 1; i >= 0; i--) { // 从最高位到最低位遍历数组 numArr
printf("%d", numArr[i]); // 输出当前位的值(0 或 1)
}
}
方法二、递归实现 🍭
void dectobin(int n) {
if (n > 1) {
dectobin(n / 2); // 递归调用,处理高位数
}
printf("%d", n % 2); // 输出当前位
}