利用堆栈实现十进制向其他进制的数制转换 问题

    科技2024-02-23  97


    利用堆栈实现十进制向其他进制的数制转换 问题


    利用辗转相除法 比如 3467%8--------------3 433%8-----------------------1 54%8-------------------------6 6%8---------------------------6 (3467)10=(6613)8 得到的余数和输出的余数位置正好颠倒,所以用栈

    思想 n为需转换的数 r为进制 当n>0时 (1)当n!=0时,将n%r压入栈中 当n=0时,将栈中的内容依次出栈 (2)用n/r代替n; (3)当n!=0时,重复操作 (1)和(2);

    ~~```cpp

    //数制的转换 #include<iostream> #include<string> #include<stack>//调用c++中stack类函数 using namespace std; void conversion (int n,int r) { stack<int> p; int x; while(n!=0) { p.push(n%r);//辗转相除法 n=n/r; } while(p.empty()!=1) { x=p.top(); p.pop();//出栈栈顶位置,因为不能返回栈顶位置,所以用 top printf("%d",x); } } int main() { int n,r; cin>>n>>r; conversion(n,r); return 0; }

    利用自定义的顺序栈转换 //这个比较简单//

    #include<iostream> using namespace std; #define L 10 void conversion(int n,int r) { int s[L],top; int x; top=-1; while(n!=0) { s[++top]=n%r; n=n/r; } while(top!=-1) { printf("%d",s[top--]); } } int main() { int n,r; cin>>n>>r; conversion(n,r); return 0; }
    Processed: 0.009, SQL: 8