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;
}

原文地址:https://www.cnblogs.com/SZU-DS-wys/p/12180720.html

时间: 2024-10-13 22:54:29

DS队列+堆栈--数制转换的相关文章

7、蛤蟆的数据结构笔记之七栈的应用之数制转换

7.蛤蟆的数据结构笔记之七栈的应用之数制转换 本篇名言:"人生意义的大小,不在乎外界的变迁,而在乎内心的经验." 上面两篇中我们实现了链栈和链队列,接下去哦我们看看实际中栈的应用场景.本次来看下栈在数制转换的作用. 欢迎转载,转载请标明出处: 1.  原理介绍 十进制N和其他进制数的转换时计算机实现计算的基本问题.简单算法如下: N=(N div d )x d + N modd 2.  实现 2.1         定义结构体 定义堆栈的结构体 typedef struct { int

python开发基础:三元运算&amp;生成式&amp;成员运算&amp;解压法&amp;队列堆栈&amp;数据类型转换

一,三元运算&生成式&成员运算&解压法&队列堆栈&数据类型转换,都在一个code里 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #三元运算 5 #if条件成立的结果 if 条件 else else条件成立的结果 6 #原来逻辑 7 # a,b=10,20 8 # if a > b: 9 # c = 5 10 # else: 11 # c = 10 12 # print(c) 13 #三元逻辑 14 # a

python开发基础:生成式&amp;成员运算&amp;解压法&amp;队列堆栈&amp;数据类型转换

一,生成式&成员运算&解压法&队列堆栈&数据类型转换 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #队列:先进先出 5 # queue_l=[] 6 #入队 7 # queue_l.append('first') 8 # queue_l.append('second') 9 # queue_l.append('third') 10 # print(queue_l) 11 #出队 12 # print(queue_l.p

数据结构实践——数制转换(栈)

本文是针对数据结构基础系列网络课程(3):栈和队列的实现项目. [项目 - 数制转换] 把十进制的整数转换为任一进制数输出.请利用栈设计算法,并实现程序. 提示:要转换为r进制,则原来的数逐次除以基数r(除完之后用商再除),直到商为0,得到的一系列余数的逆序就是转换结果.这里的"逆序",意味着后产生的余数,会先输出,后进先出,栈的机会来了-- [参考解答] 解法:头文件sqstack.h请见[顺序栈算法库],使用链栈也可以. #include <stdio.h> #incl

快速排序递归非递归队列堆栈实现

递归实现 #include<iostream> using namespace std; template <class T> void QuickSort(T A[],int left,int right) { if(left<right) { int i=left; int j=right+1; do { do i++;while(A[i]<A[left]); do j--;while(A[j]>A[left]); if(i<j) Swap(A[i],A

数据结构--栈的基本操作及应用(数制转换)

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <math.h> #define TRUE 1 #define FALSE 0 #define ERROR 0 #define INFEASIBLE -1 typedef int Status; typedef int Boolean; typedef int SElemType; #define STACK_INIT_SI

数制转换

进制的转换可以借助强大的BigInteger,非常的方便. new java.math.BigInteger(num, from).toString(to); 表示num要转换的数从from源数的进制 转换成to的进制. 题目描述 求任意两个不同进制非负整数的转换(2进制-16进制),所给整数在long所能表达的范围之内.     不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F). 输入描述:     输入只有一行,包含三个整数a,n,

01:数制转换

01:数制转换 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 求任意两个不同进制非负整数的转换(2进制-16进制),所给整数在long所能表达的范围之内.不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F). 输入 输入只有一行,包含三个整数a,n,b.a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数.a,b是十进制整数,2 =< a,b <= 16. 输出 输出包含一行,该

处理数据类型转换,数制转换、编码转换相关的类

MXS&Vincene  ─╄OvЁ  &0000014 ─╄OvЁ  MXS&Vincene MXS&Vincene  ─╄OvЁ:今天很残酷,明天更残酷,后天很美好,但是绝大部分人是死在明天晚上,只有那些真正的英雄才能见到后天的太阳. MXS&Vincene  ─╄OvЁ:We're here to put a dent in the universe. Otherwise why else even be here? 正文>>>>>