百练-计数表示转换

描述

在奥特曼的家乡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;
}

 

posted @ 2018-05-12 23:56  xzhws  阅读(50)  评论(0编辑  收藏  举报