PAT乙级1022

题目链接

https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344

题解

很简单,参考十进制转二进制的方法,除二取余至商为0。

这里要注意:需要处理a+b等于0的情况(参考了https://blog.csdn.net/m0_37285185/article/details/68936069,我又没发现边界……My bad,this is not so me.)

// PAT BasicLevel 1022
// https://pintia.cn/problem-sets/994805260223102976/problems/994805299301433344

#include <iostream>
#include <stack>
#include <string>
using namespace std;

string numBaseConversion(int num,int base);

int main()
{
    // 获取a、b和d
    int a,b,base;
    cin >> a >> b >> base;

    // 进制转换,输出结果
    cout << numBaseConversion(a+b,base);

    //system("pause");
    return 0;
}

// 将一个十进制数转换为base(1,10]进制的字符串
string numBaseConversion(int num, int base)
{
    stack<char> charStack;
    string res="";
    
    // 处理num为0的情况
    if(num==0){
        return "0";
    }

    // 处理num非0的情况
    while(num>0){
        charStack.push(num%base+'0');
        num/=base;
    }

    while (!charStack.empty()){
        res+=charStack.top();
        charStack.pop();
    }
    
    return res;
}

作者:@臭咸鱼

转载请注明出处:https://www.cnblogs.com/chouxianyu/

欢迎讨论和交流!


posted @ 2019-08-06 15:31  臭咸鱼  阅读(153)  评论(0编辑  收藏  举报