计数表示转换

这次写了好久,还是做一下笔记。

题目: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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值