ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2020-01-11 18:52:54  阅读:428  来源: 互联网

标签:zheng 数制 savezheng int xiao push 堆栈 include 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;
}

标签:zheng,数制,savezheng,int,xiao,push,堆栈,include,DS
来源: https://www.cnblogs.com/SZU-DS-wys/p/12180720.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有