进制转换
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
输入一个十进制数N,将它转换成R进制数输出。
输入
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
示例输入
7 2 23 12 -4 3
示例输出
111 1B -11
提示
来源
HDOJ
这道题比上道题稍微复杂一点,因为考虑到大于十进制的情况。而且栈的存储类型由int改为char。如果想用自己定义的栈来实现,请参考我的上一篇博客数据结构实验之栈一:进制转换。只要稍微改一下即可。
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int n,r;
while(cin>>n>>r)
{
if(n==0) //不要忘记0的情况
cout<<"0\n";
else
{
stack<char >s;
int flag=0; //标记变量,判断正负
while(n)
{
int k=n%r;
char p;
if(k<0)
{
flag=1;
k=-k;
}
if(k<10)
p=k+'0';
else
{
p='A';
for(int i=11; i<=k; i++)
p++;
}
s.push(p);
n=n/r;
}
if(flag)
cout<<"-";
while(!s.empty())
{
cout<<s.top();
s.pop();
}
cout<<endl;
}
}
return 0;
}