描述
在奥特曼的家乡M78星云,生活着一群快乐的外星人。他们勤劳勇敢每天兢兢业业的维护着宇宙和平。虽然在一起生活的很融洽,但他们的祖先忘记了统一数的表示法,星云中不同国家固执地各自遵守着古老的计数表示方法。
M78星云中一共有35个国家,分别使用2-36进制作为它们表示数的方式。巧合的是,奥特曼所在的国家遵守着地球上的10进制。为了答谢奥特曼为地球做出的贡献,希望你能写一个程序,以奥特曼所在国家的数的表示为基准,实现到其他国家的数的表示的转换。
输入有多行,每行一个位数不超过200位的整数N,以及要表示的进制基数B(2<= B <= 36)输出输出该数的B进制表示
注:对于超过10的进制,采用小写的a、b、c …… z来表示10、11、12 …… 35
样例输入
5124095577148911 16
样例输出
12345678abcdef
解题思路:
#include<iostream>
#include<string>
#include<vector>
#include<stack>
#include<algorithm>
using namespace std;
int main(){
string str;
int n;
int carry,i,j;
while(cin>>str>>n)
{
int len=str.length();
vector<int> v(len,0);
stack<char> s;
for(i=0;i<len;++i)v[i]=str[i]-'0';
for(i=0;i<len;v[i]?0:++i)
{
for(j=i,carry=0;j<len;++j)
{
v[j]+=carry*10;
carry=v[j]%n;
v[j]/=n;
}
char tmp;
if(carry>=0&&carry<=9)
tmp=carry+'0';
else
tmp=carry-10+'a';
s.push(tmp);
}
for(;s.size()>1 && s.top()=='0';s.pop());
for(;s.size();cout<<s.top(),s.pop());
cout<<endl;
}
return 0;
}