十进制数N和其他d进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:
N = (N div d)*d + N mod d (其中div为整除运算,mod为求余运算)
/***************************************
* *
* 文件夹: ▲03 栈和队列\02 Conversion *
* *
* 文件名: Conversion.h *
* *
* 内 容: 进制转换相关操作列表 *
* *
***************************************/
#ifndef CONVERSION_H
#define CONVERSION_H
#include <stdio.h>
#include "../01 SequenceStack/SequenceStack.c" //**▲03 栈和队列**//
/* 进制转换函数列表 */
void conversion(int i);
/*━━━━━━━━━━━━━━━━━┓
┃(01)算法3.1:十进制数转八进制数。 ┃
┗━━━━━━━━━━━━━━━━━*/
#endif
/***************************************
* *
* 文件夹: ▲03 栈和队列\02 Conversion *
* *
* 文件名: Conversion.c *
* *
* 算 法: 3.1 *
* *
***************************************/
#ifndef CONVERSION_C
#define CONVERSION_C
#include "Conversion.h" //**▲03 栈和队列**//
/*════╗
║ 算法3.1║
╚════*/
void conversion(int i)
{
SqStack S;
SElemType_Sq e;
InitStack_Sq(&S);
printf("十进制数 %d 转换为八进制数后为:0", i);
while(i)
{
Push_Sq(&S, i%8); //进栈时从低位到高位
i = i/8;
}
while(!StackEmpty_Sq(S))
{
Pop_Sq(&S, &e); //出栈时从高位到低位
printf("%d", e);
}
}
#endif
/***************************************
* *
* 文件夹: ▲03 栈和队列\02 Conversion *
* *
* 内 容: 进制转换相关函数测试 *
* *
***************************************/
#include "Conversion.c" //**▲03 栈和队列**//
int main(int argc, char **argv)
{
int i = 342391;
printf("将十进制数转换为八进制数...\n");
conversion(i);
printf("\n\n");
return 0;
}