已知num为无符号十进制整数,请写一非递归算法,该算法输出num对应的r进制的各位数字。要求算法中用到的栈采用线性链表存储结构(1<r<10)。
十进制转换成r进制:
- 用被转换的十进制除以r,得到商和余数,将余数作为r进制数的一位
- 将商继续除以r,重复步骤1,直到商为0
- 将所有余数按相反的顺序排列,即可得到r进制的转换结果
- 思路:num%r得到末位r进制数,num/r得到num去掉末位r进制数后的数字。得到的末位r进制数采用头插法插入链表中,更新num的值,循环计算,直到num为0,最后输出链表。
typedef struct node //定义一个单链表
{
int data;
struct node *next;
}link; //命名为link
void trans(int num, int r)
{
link *head = NULL, *s;//定义头指针为空,s指针
int n;
while(num > 0)
{
n = num % r; //对num取余
s = (link *)malloc(sizeof(link)); //申请空闲空间
s -> data = n; //末位r进制数存入s数据域中
s -> next = head; //头插法插入链表中(无头结点)
head = s;
num = num / r; //更新num的值,至num为0退出循环
}
printf("输出r进制的各位数字:");
s = head; //重置,s指针与头指针指向同一处
while(s != NULL) //s不为空,输出链表,栈先入后出
{
printf(" %d " , s -> data);
s = s -> next;
}
}