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.)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// 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/

欢迎讨论和交流!