![]() |
#2
flyingcloude2009-10-02 10:34
#include<iostream>
using namespace std; class D2Other { public: D2Other(int number); void D2B();//十进制转二进制 void D2O();//十进制转八进制 void D2H();//十进制转十六进制 void D2Du();//十进制转三十二进制 private: void change(int n,int num);//进行转换运算 void push(char c);//进栈 char pop();//出栈 void print();//输出转换的结果 bool isEmpty(); int num; char result[100]; int count; }; D2Other::D2Other(int number):num(number),count(0){} void D2Other::print() { cout<<"转换结果: "; while(!isEmpty()) cout<<pop(); cout<<"\n"; } void D2Other::D2B() { count=0; change(2,num); print(); } void D2Other::D2O() { count=0; change(8,num); print(); } void D2Other::D2H() { count=0; change(16,num); print(); } void D2Other::D2Du() { count=0; change(32,num); print(); } void D2Other::change(int n,int num) { if(n!=2&&n!=8&&n!=16&&n!=32) { cout<<"输入要转换的进制不正确"<<'\n'; return; } int temp = num%n; char c; if(temp>9) c = char('A'+(temp-10)); else c = num%n+'0'; push(c); num = num/n; if(num>0) change(n,num); } void D2Other::push(char c) { if(count<100) result[count++] = c; else cout<<"堆栈已满"<<'\n'; } char D2Other::pop() { if(count>0) return result[--count]; else cout<<"堆栈已空"<<'\n'; } bool D2Other::isEmpty() { if(count<=0) return true; return false; } main(void) { D2Other d(40); d.D2B(); d.D2O(); d.D2H(); d.D2Du(); } [ 本帖最后由 flyingcloude 于 2009-10-2 10:54 编辑 ] |
编程,将用户输入的一个十进制数转换成二、八、十六、三十二进制数。
要求:(1)十六进制数用0—9和A—F表示。三十二进制用0—9和A—T表示。
(2)利用递归工作栈的后进先出特性。
(小弟刚学c++,还没学数据结构,对这道题无法下手,望高手指点,谢谢!)