【笔试题】N进制数向M进制数转换



考虑的就是大于10的数都用字母表示,0~9有10个数字,再加上A~Z有26个字母刚好可以表示36进制数。再考虑就是大数问题,int表示不了怎么办,考虑用字符串。

1、采取模N除N的方式,将原数字转换为10进制数。

2、采用除留余数法,将数字转化为M进制数。

3、逆置字符串。


#include<iostream>
#include<string>
using namespace std;

string* fun(const string number, int n, int m)
{
          string s("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
          unsigned int i = 0;
          int num = 0;
          while (i < number.size())
          {
                   num = num * n + number[i] - '0';
                   i++;
          }

          i = 0;
          string* ret = new string;
          while (num > 0)
          {
                   ret->push_back(s[num%m]);
                   num /= m;
          }

          int begin = 0;
          int end = ret->size() -1;
          while (begin < end)
          {
                   char tmp = (*ret)[begin];
                   (*ret)[begin] = (*ret)[end];
                   (*ret)[end] = tmp;
                   begin++;
                   end--;
          }

          return ret;
}

int main()
{
          string s("162342");
          string *ret = fun(s, 10, 36);
          cout << *ret << endl;
          delete ret;
          ret = NULL;
          system("pause");
          return 0;
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值