进制转换 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;
}

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

相关文章推荐

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

为啥重新做原题做不出来了呢!!!抓狂

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

#include #include using namespace std; typedef struct Stack { char *top,*base; int Size; ...

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

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

栈模拟数字进制转换

/* 数据结构分析与学习专栏 * Copyright (c) 2015, 山东大学 计算机科学与技术专业 学生 * All rights reserved. * 作 者: 高...

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

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

poj 3159 SPFA+手写栈

一天啊  。。就挂在这道题上了。。。next数组开小了。。导致一直TLE。。服了我自己了。。T,T 题意:     A小朋友不希望B小朋友比他多X块糖。。 SPFA+手写栈实现    队列会超时...

暑假集训 7.30 数据结构实验之栈六:下一较大值(二)sdut oj3333(手写栈)

数据结构实验之栈六:下一较大值(二) Time Limit: 150MS Memory limit: 8000K 题目描述 对于包含n(1 输入  输入有多组,第一行输入t(1<=t<=10...

ACMSTEP 1.2.7 Specialized Four-Digit Numbers //水题 模拟 进制转换

原题网址 Specialized Four-Digit Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536...

HDU 2106 decimal system(进制转换+模拟)

decimal system Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

HDU 1335 Basically Speaking (模拟进制转换)

Basically Speaking Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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