进制转换——除r取余法

Think:
1知识点:进制转换(除r取余法)+stack容器
2反思:注意当输入0的情况

sdut题目链接
进制转换——百度经验

进制转换
Time Limit: 1000MS Memory Limit: 65536KB
Problem Description
输入一个十进制数N,将它转换成R进制数输出。

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

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

Example Input
7 2
23 12
-4 3

Example Output
111
1B
-11

Hint

Author
HDOJ

以下为Accepted代码

#include 

using namespace std;

stack <char> sta;

int main(){
    long long n, r, t;
    char c;
    bool flag;
    while(~scanf("%lld %lld", &n, &r)){
        while(!sta.empty())
            sta.pop();
        flag = true;
        if(n < 0){
            flag = false;
            n = -n;
        }
        if(!n)
            sta.push('0');
        while(n){
            t = n%r;
            if(t < 10)
                c = t + '0';
            else
                c = t - 10 + 'A';
            sta.push(c);
            n /= r;
        }
        if(!flag)
            printf("-");
        while(!sta.empty()){
            printf("%c", sta.top());
            sta.pop();
        }
        printf("\n");
    }
    return 0;
}


/***************************************************
User name: 
Result: Accepted
Take time: 0ms
Take Memory: 248KB
Submit time: 2017-06-18 22:04:42
****************************************************/

你可能感兴趣的:(知识体系,stack容器)