从十进制转换为任何基数

时间:2019-06-25 19:41:31

标签: c++ numbers

如何快速将十进制数字从(0-9,A-Z)范围数字转换为任何底数? 我需要制作一个将十进制数字n大于0的函数,然后该函数将通过给定的基数将其转换为char数组中的数字。函数应返回数字位数。 我可以使其速度更快还是有更快的解决方案?就像一个很好的复杂性吗?当基数为0或1时该怎么办?在末尾反转char数组会比在char数组前面添加反转快吗? 重要的是不能删除char R [32]变量,很明显,您可以将char数组放入函数参数中,然后仅获取其长度并根据长度设置一些条件。

#include <iostream>
#include <algorithm>
char R[32];
int convert(unsigned int n, unsigned int p) 
{
    if (p > 36) {
        throw std::logic_error("Base should be from a 0-9 A-Z range");
    }
    unsigned int i = 0;
    unsigned int r;
    for(i=0;n!=0 && i<32;i++) 
    {
        r = n % p;
        if (r >= 10) {
            R[i] = 'A' + (r-10);
        }
        else
            R[i] = '0'+r;
        n = n / p;
    }
    std::reverse(R,R+strlen(R));
    return i;
}

int main()
{
convert(4,32);
cout<<R;
}

0 个答案:

没有答案