原创作品 转载请注明出处http://blog.csdn.net/always2015/article/details/45814969
这一道题简单题,只要掌握十进制怎么和16进制,八进制转换的方法,就能很好的模拟其他进制的转换。在这里用到了一个翻转函数reverse ( s.begin(), s.end () ); 反向排序函数,即字符串反转函数。注意他的头文件是:
#include <algorithm>
代码很简单。AC代码如下:
#include <iostream>
#include<string>
#include<algorithm>
using namespace std;
int main(void)
{
int n,r,symbol=1;
string int_binary;
while(cin>>n>>r)
{
//如果是负数则记下符号。把输入的数变为正
if(n<0)
{
symbol=-1;
n=-n;
}
//当r>10的时候和16进制的类似
if(r>10)
{
while(n!=0)
{
//将大于10的变为字母,加入到字符串中
if(n%r>=10)
int_binary+=((n%r)-10)+'A';
else//小于10则直接转为字符
int_binary+=(n%r)+'0';
n/=r;//修改n
}
}
else//r<10的时候直接转为字符
{
while(n!=0)
{
int_binary+=(n%r)+'0';
n/=r;
}
}
//注意:最后所生成的字符串和最后输出的字符串刚好是相反的,所以这里需要翻转
reverse(int_binary.begin(),int_binary.end());
//符号不同时候的输出
if(symbol==-1)
cout <<"-"<<int_binary<< endl;
else
cout<<int_binary<<endl;
//必须做字符串清空处理,方便进入下一个循环,符号也重新初始化
int_binary.clear();
symbol=1;
}
return 0;
}