#include <iostream>
#include <stack>
#define posi true
#define nega false
using namespace std;
int main(){
int dec, R;
bool flag;
stack<char> r;
int temp;
char res;
while(cin >> dec >> R){
if(dec < 0){
flag = nega;
dec = -dec;
}
else {
flag = posi;
}
if(dec == 0){//0的单独看
cout << dec << endl;
}
/*
*进制转换的算法:16 = H 10 推导: 1.dec = 16 != 0,继续,dec % 16 = 0,0->0,dec = dec /16 =1;
2.dec = 1 != 0,继续,1 % 16 = 1,1->1 dec = 1/16 = 0;
3.dec = 0,结束
*因为这个过程所得结果是从低位到高位的(越往下除以进制R的次数越多),结果要倒过来,所以用栈来存放顺序
*/
else{
//压栈
while(dec != 0){ //完全根据算法来写的代码,先想算法,再用代码实现
temp = dec % R;
if(temp >= 10){
r.push(temp-10+'A');//栈的应用
}
else{
r.push(dec % R + '0');
}
dec = dec / R;
}
//输出
if(flag == nega){
cout << "-";
}
while(!r.empty()){
cout << r.top();
r.pop();
}
cout << endl;
}
}
return 0;
}
杭电OJ2031
最新推荐文章于 2020-10-28 17:44:20 发布