H-进制转换

来源:互联网 发布:优化蜜蜡是假的吗 编辑:程序博客网 时间:2024/06/13 20:14

H - 进制转换
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Submit

Status

Practice

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

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

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

Sample Input
7 2
23 12
-4 3

Sample Output
111
1B
-11

很常见的进制转换,利用栈的先进后出性,可以简化流程
栈的基本操作http://blog.csdn.net/qq_32680617/article/details/50634920

处理时注意输入的可能是负数,并且要求进制大于十时,模仿十六进制输出大写字母

代码

#include<cstdio>#include<stack>#include<cstring>#include<cctype>#include<cstdlib>using namespace std;int main(){    int n,r;    while(scanf("%d%d",&n,&r)!=EOF)    {        bool flag=0;//n为负数就标记为1;        if(n<0)        {            n=-n;            flag=1;        }        stack<int>opnd;        while(n>=r)        {            opnd.push(n%r);            n=n/r;        }        if(n);        opnd.push(n);        if(flag)            printf("-");        while(1)        {            if(opnd.empty())            {                printf("\n");                break;            }            int x=opnd.top();            if(x>=10)            {                printf("%c",x%10+'A');                opnd.pop();            }            else            {                printf("%d",x);                opnd.pop();            }        }    }}
0 0