辗转相除法 /* algo3-1.c 调用算法3.1的程序 */ typedef int SElemType; /* 定义栈元素类型为整型 */ #include"c1.h" #include"c3-1.h" /* 采用顺序栈 */ #include"bo3-1.c" /* 利用顺序栈的基本操作 */ void conversion() /* 算法3.1 */ { /* 对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 */ SqStack s; unsigned n; /* 非负整数 */ SElemType e; InitStack(&s); /* 初始化栈 */ printf("n(>=0)="); scanf("%u",&n); /* 输入非负十进制整数n */ while(n) /* 当n不等于0 */ { Push(&s,n%8); /* 入栈n除以8的余数(8进制的低位) */ n=n/8; } while(!StackEmpty(s)) /* 当栈不空 */ { Pop(&s,&e); /* 弹出栈顶元素且赋值给e */ printf("%d",e); /* 输出e */ } printf("/n"); } void main() { conversion(); } 其他 先转成十进制数据类型保存的二进制。 使用循环代替栈( 不使用栈的辗转相除法) 把这个十进制数据类型转换成字符串。 需要中间值很大,转换范围有限。下面用itoa也可以啦。 #include <stdio.h> void NumSysA2B(int intNSA,int NumInSysA,int intNSB,char *ExpInSysB) { //SqStackNum sNumSys; //InitStackNum(&sNumSys); int intInSysB=0; while (NumInSysA) { //PushNum(&sNumSys,NumInSysA%intNSB);//暂时考虑10进制转其他进制 intInSysB=intInSysB*10+NumInSysA%intNSB; NumInSysA=NumInSysA/intNSB; } sprintf(ExpInSysB,"%d",intInSysB); } int main() { char cInSysB[256]; NumSysA2B(10,136,2,cInSysB); printf("%s",cInSysB); return 0; } 用itoa做进制转换 #include <stdio.h> #include <stdlib.h> int main() { char cInSysB[256]; itoa(255,cInSysB,2);//255转换成二进制数 printf("%s",cInSysB); }