DS队列+堆栈--数制转换

Posted szu-ds-wys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS队列+堆栈--数制转换相关的知识,希望对你有一定的参考价值。

题目描述

对于任意十进制数转换为k进制,包括整数部分和小数部分转换。整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换

整数部分19,					小数部分0.125
19 / 2 = 9 … 1					0.125 * 2 = 0.25 … 0
9 / 2 = 4 … 1					0.25 * 2 = 0.5   … 0
4 / 2 = 2 … 0 					0.5 * 2 = 1     … 1
2 / 2 = 1 … 0
1 / 2 = 0 … 1

所以整数部分转为 10011,小数部分转为0.001,合起来为10011.001

提示整数部分可用堆栈,小数部分可用队列实现

注意:必须按照上述方法来实现数制转换,其他方法0分

输入

第一行输入一个t,表示下面将有t组测试数据。

接下来每行包含两个参数n和k,n表示要转换的数值,可能是非整数;k表示要转换的数制,1<k<=16

 

输出

对于每一组测试数据,每行输出转换后的结果,结果精度到小数点后3位

输出小数点后几位的代码如下:

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
  double r = 123.56789;
  cout<<fixed<<setprecision(4)<<r<<endl;   //输出小数点后4

 return 0;
}

 

 

样例输入

2 19.125 2 15.125 16

样例输出

10011.001 F.200

提示

#include<iostream>
#include<stack>
#include<queue>
#include<string>
#include<iomanip>
using namespace std;
void display(int n)
{
    if(n<10)
        cout<<n;
    else if(n==10)
        cout<<"A";
    else if(n==11)
        cout<<"B";
    else if(n==12)
        cout<<"C";
    else if(n==13)
        cout<<"D";
    else if(n==14)
        cout<<"E";
    else if(n==15)
        cout<<"F";
    return;
}
 
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        double n;
        cin>>n;
        int k;
        cin>>k;
        int zheng=(int)n;
        double xiao=n-zheng;
        stack<int>savezheng;
        queue<int>savexiao;
        if(zheng==0)
            savezheng.push(0);
        else
        {
            while(zheng)
            {
                savezheng.push(zheng%k);
                zheng/=k;
            }
        }
        if(xiao==0)
        {
            savexiao.push(0);
            savexiao.push(0);
            savexiao.push(0);
        }
        else
        {
            int number=3;
            int I;
            while(number!=0)
            {
                xiao*=k;
                I=(int)xiao;
                savexiao.push(I);
                xiao-=I;
                number--;
            }
        }
        while(!savezheng.empty())
        {
            display(savezheng.top());
            savezheng.pop();
        }
        cout<<".";
        while(!savexiao.empty())
        {
            display(savexiao.front());
            savexiao.pop();
        }
        cout<<endl;
    }
    return 0;
}

以上是关于DS队列+堆栈--数制转换的主要内容,如果未能解决你的问题,请参考以下文章

JS堆栈与拷贝

JS堆栈与拷贝

c语言 数制转换(递归)

c语言编程题,数制转换

数据结构 堆栈

java的数制转换(详解,全!)