进制转换 sdutoj1252(模拟手写栈2333333)

原创 2016年07月28日 20:14:06

进制转换

Time Limit: 1000MS Memory limit: 65536K

题目描述

输入一个十进制数N,将它转换成R进制数输出。

输入

输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。

输出

为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

示例输入

7 2
23 12
-4 3

示例输出

111
1B
-11

///手写模拟栈233333 (估计要不是不能用STL都不手写了)

///此题坑点 0 !另外注意 long long

///ACcode

#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;

#define maxsize 100000
#define ll long long

typedef struct Stack
{
    int Size;
    char *top,*base;
} Stack;

bool Empty(Stack &s)
{
    if (s.top == s.base)
    {
        return 1;
    }
    return 0;
}

void Creat(Stack &s)
{
    s.base=new char[maxsize];
    s.top=s.base;
    s.Size=maxsize;
}

void push(Stack &s,char e[])
{
    if (s.top-s.base >= s.Size)
    {
        s.base=(char *)realloc(s.base,2*maxsize*sizeof(Stack));
        s.Size+=maxsize;
    }
    s.top++;
    *s.top=e[0];
}

void pop(Stack &s)
{
    if (s.top != s.base)
    {
        s.top--;
    }
}

void print(Stack &s)
{
    while (!Empty(s))
    {
        cout<<*s.top;
        pop(s);
    }
    cout<<endl;
}

void change(Stack &s,ll x,ll mod)
{
    int m;
    if (x<0)
    {
        x=-x;
    }
    char nu[3];
    while(x)
    {
        m=x%mod;
        if (m==10)
        {
            nu[0]='A';
        }
        else if (m==11)
        {
            nu[0]='B';
        }
        else if (m==12)
        {
            nu[0]='C';
        }
        else if (m==13)
        {
            nu[0]='D';
        }
        else if (m==14)
        {
            nu[0]='E';
        }
        else if (m==15)
        {
            nu[0]='F';
        }
        else nu[0]=m+'0';
        push(s,nu);
        x=x/mod;
    }
}

void sign(Stack &s,ll x)
{
    if (x<0)
    {
        push(s,"-");
    }
}

int main()
{
    ll n,m;
    while (cin>>n>>m)
    {
        if (n==0)
        {
            cout<<"0"<<endl;
        }
        else
        {
            Stack s;
            Creat(s);
            change(s,n,m);
            sign(s,n);
            print(s);
            Clear(s);
        }
    }
    return 0;
}

版权声明:有错误麻烦赐教,感激不尽~~~(转载留言哦~)

java 使用LinkedList模拟一个堆栈或者队列数据结构

java 使用LinkedList模拟一个堆栈或者队列数据结构
  • coderinchina
  • coderinchina
  • 2014年10月29日 11:35
  • 2107

顺序栈的定义以及应用:十进制与八进制的转换、十进制与十六进制的转换

利用栈的顺序存储结构,设计一组输入数据(假定为一组整数),能够对顺序栈进行如下操作: 初始化一个空栈,分配一段连续的存储空间,且设定好栈顶和栈底; 完成一个元素的入栈操作,修改栈顶...
  • qq_34803572
  • qq_34803572
  • 2016年10月18日 22:50
  • 2484

C++利用栈进行十进制与二进制的转换

博主这个学期刚学习了数据结构,然后你懂得老师们就开始愉快的出难题,好吧不该说老师的坏话,那个题目如下: 在日常生活中我们所见到的数大都为十进制数,但是在计算机中,所有的数字都会被转化为二进制数进行存储...
  • down_load_111
  • down_load_111
  • 2015年10月25日 21:42
  • 1140

数据结构之栈进制转换 (sdut oj 1252)

为啥重新做原题做不出来了呢!!!抓狂
  • rain_snowing
  • rain_snowing
  • 2016年07月29日 20:23
  • 151

暑假集训7.29 一般表达式转换后缀表达式(手写模拟栈....)sdutoj2132

#include #include using namespace std; typedef struct Stack { char *top,*base; int Size; ...
  • Gentle_Guan
  • Gentle_Guan
  • 2016年07月30日 10:44
  • 260

暑假集训 8.6 sdutoj2484 算术表达式的转换(模拟栈;前中后缀转换)

算术表达式的转换 Time Limit: 1000MS Memory limit: 65536K 题目描述 小明在学习了数据结构之后,突然想起了以前没有解决的算术表达式转化成后缀式的问...
  • Gentle_Guan
  • Gentle_Guan
  • 2016年08月06日 20:48
  • 214

栈模拟数字进制转换

/* 数据结构分析与学习专栏 * Copyright (c) 2015, 山东大学 计算机科学与技术专业 学生 * All rights reserved. * 作 者: 高...
  • gaoxiangnumber1
  • gaoxiangnumber1
  • 2015年04月06日 00:12
  • 356

bzoj 2819: Nim(树链剖分+手写栈)

2819: Nim Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1778  Solved: 688 [Submit][Status][Dis...
  • clover_hxy
  • clover_hxy
  • 2016年05月12日 08:09
  • 365

POJ 3694 network 无向图求桥 手写栈版tarjan

这题以前做过 大意就是给出一个无向图,然后每次询问加一条边,然后输出当前图中剩余的桥的个数 大概做法就是先tarjan把桥都弄出来,然后每次加边就裸求LCA。 不过很蛋疼的事情就是在HDU上会爆栈,这...
  • sdj222555
  • sdj222555
  • 2012年09月16日 10:19
  • 2968

poj 3159 SPFA+手写栈

一天啊  。。就挂在这道题上了。。。next数组开小了。。导致一直TLE。。服了我自己了。。T,T 题意:     A小朋友不希望B小朋友比他多X块糖。。 SPFA+手写栈实现    队列会超时...
  • onepiecehuiyu
  • onepiecehuiyu
  • 2012年08月24日 20:02
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进制转换 sdutoj1252(模拟手写栈2333333)
举报原因:
原因补充:

(最多只允许输入30个字)