题目:hdu oj 2031
思路和代码注释如下:
#include<iostream>
#include<stack>
using namespace std;
//十进制转换为2~16进制
//思路:1.用该数不断对目标进制不断求余,将余数保存,之后用商(取整)继续求余,直到商为0为止
//2.因为最后是逆序输出,所以很适合栈先进后出的访问规则,所以我就用了stl里的栈
int main()
{
int num,n;
stack<int> mystack;
while (cin>>num>>n){
if(num==0)
cout<< n ;
else {
if(num < 0){ //若为负数,将其转换为正数,并输出负号
num = -num;
cout<< "-" ;
}
while (num){
mystack.push(num%n); //余数入栈
num/=n; //取整得到商
}
while (!mystack.empty()){
if(mystack.top()<10)
cout<<mystack.top(); //小于10直接输出
else
cout<<(char)(mystack.top()-10+'A'); //大于10,转为字母,注意输出要转换为字符,不是ASCII码
mystack.pop();
}
}
cout<<"\n";
}
system("pause");
return 0;
}