这次写了好久,还是做一下笔记。
题目:openjudge 3530
http://hzoi.openjudge.cn/lx4/1008/
-
总时间限制:
- 10000ms 内存限制:
- 65536kB
-
描述
-
在奥特曼的家乡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 <vector>
#include <string>
using namespace std;
vector<int> Array;
char num2char(int x){
if(x>=0&&x<=9)
return '0'+x;
else return 'a'+(x-10);
}
void div(int B,int &n,int &nd){
nd=0;
for(int i=0;i<n;i++){
int x=nd*10+Array[i];
Array[i]=x/B;
nd=x%B;
}
while(*Array.begin()==0){
if(Array.begin()+1==Array.end()){
n=0;
return;
}
Array.erase(Array.begin());
n--;
}
}
int main(){
vector<char> array2;
int B;
string s;
while(cin>>s){
cin>>B;
int size=0;
Array.clear();
for(int i=0;i<s.length();i++){
Array.push_back(s[i]-'0');
}
int n=s.length(),nd=0;
while(n>0){
div(B,n,nd);
array2.insert(array2.begin(),num2char(nd));
size++;
}
for(int i=0;i<size;i++)
cout<<array2[i];
cout<<endl;
}
return 0;
}