1 位的数据表示与应用 2 十进制转二进制 可以利用循环除2及求余来计算,最先计算出的余数应该是放在数字序列的最右端,最后算出的余数应该放在数字序列的最左端,而数字序列的书写是从左至右的,所以是一个倒序的操作,可以利用栈的后进先出来模拟操作,类似的,也可以利用递归来进行输出。 3 实现栈和十进制输出其它进制 #include<iostream> using namespace std; #define MAX_STACK_SIZE 100 /* 栈向量大小 */ typedef int ElemType; typedef struct sqstack { ElemType stack_array[MAX_STACK_SIZE]; int top; int bottom; }SqStack; SqStack Init_Stack(void) { SqStack S; S.bottom=S.top=0; return(S); } int push(SqStack &S, ElemType e) /* 使数据元素e进栈成为新的栈顶 */ { if(S.top==MAX_STACK_SIZE-1) return -1; /* 栈满,返回错误标志 */ S.top++; /* 栈顶指针加1 */ S.stack_array[S.top]=e; /* e成为新的栈顶 */ return 0; /* 压栈成功 */ } int pop(SqStack &S, ElemType *e) /*弹出栈顶元素*/ { if(S.top==0 ) return -1; /* 栈空,返回错误标志 */ *e=S.stack_array[S.top]; S.top--; return 0; } void conversion(int n, int d) /*将十进制整数N转换为d(2或8)进制数*/ { SqStack S; ElemType e; int k; S=Init_Stack(); /* 求出所有的余数,进栈 */ while(n>0) { k=n%d; push(S,k); n=n/d; } while(S.top!=0) /* 栈不空时出栈,输出 */ { pop(S,&e); printf("%1d",e); } } void main() { conversion(54,2); cout<<endl; conversion(54,8); cout<<endl; conversion(54,16); system("pause"); } /* 110110 66 36 */
4 利用递归来实现十进制输出二进制 #if(0) #include<stdio.h> #include<stdlib.h> void decToBin(int n, int base) { if (n>0) { decToBin(n/base,base); printf("%d", n%base); } } void main() { decToBin(13,2); system("pause"); } #endif //1101 /* f(13) f(6) f(3) f(1) 1%2 3%2 6%2 13%2 */ #if(1) #include<stdio.h> #include<stdlib.h> void dec2(unsigned long n,unsigned long base) { int r; r=n%base; //最后一位 if(n>=base) dec2(n/base,base);//递归后进先出的特点很适合倒序计算; printf("%d",r); } int main() { unsigned int i=0; dec2(13,2); system("pause"); return 0; } #endif /* //1101
int r=1 n=11 dec2(5) int r=1 n=5 dec2(2) int r=0 n=2 dec2(2) int r=1 n=1 */
-End-
|