注册 登录
编程论坛 C++教室

数的进制转换问题

lixin_2009 发布于 2009-10-01 17:10, 671 次点击
编程,将用户输入的一个十进制数转换成二、八、十六、三十二进制数。
要求:(1)十六进制数用0—9和A—F表示。三十二进制用0—9和A—T表示。
      (2)利用递归工作栈的后进先出特性。
(小弟刚学c++,还没学数据结构,对这道题无法下手,望高手指点,谢谢!)
4 回复
#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 编辑 ]
#3
lixin_20092009-10-04 23:27
谢谢!
#4
songxj322009-10-28 17:45
学习了
#5
kspliusa2009-10-28 23:16
学习了!
1