加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 大数据 > 正文

大数进制转换

发布时间:2021-01-09 10:19:26 所属栏目:大数据 来源:网络整理
导读:一般的数字进制转换大家都很熟悉,先转换为十进制数字,再进行 除 n 取余,这种情况适用于操作数不大的情况(不大于最大的基本数据类型(long long)),但是如果操作数上百位以上甚至上千上万该怎么办呢,显然,传统的方法肯定不行, 我们可以举个例子:将


一般的数字进制转换大家都很熟悉,先转换为十进制数字,再进行 除 n 取余,这种情况适用于操作数不大的情况(不大于最大的基本数据类型(long long)),但是如果操作数上百位以上甚至上千上万该怎么办呢,显然,传统的方法肯定不行, 我们可以举个例子:将十进制数字 12 转换为 2 进制数字

大数进制转换


第一轮运算中 1 / 2 = 0...1 随后用 1 * 10 + 2 = 12 除以 2 得到 6...0

第二轮运算中 6 / 2 = 3...0

第三轮运算中 3 / 2 = 1...1

第四轮运算中 1 / 2 = 0...1?

所以 十进制数 12 转换为 二进制为 1100

通过这个例子,我们可以看出:如果除数比被除数小,则向后退一位,如果仍然比被除数小,继续退。。。,如果到了结尾,则结束运算,得出结果,如果除数不比被除数小,则

用处数除以被除数,得到商和余数,余数作为结果储存,商用于做下一轮运算。。。直到数字到了末尾,得出结果。

下面是代码:

</pre><p><pre name="code" class="cpp">#include <iostream>
#include <string>
#include <cctype>
#include <cstring>
using namespace std;


const int old_binary = 10;
const int new_binary = 16;
int result[1000];


int Trans(string str)   // 进制转换,返回为结果数组的长度
{
int num[1000] = {0};
int save_num[1000] = {0};
int len = str.length();
for(int i = 0; i < len; i++)    // 转换为数值储存在数组中
{
if(isdigit(str[i]))
{
num[i] = str[i] - '0';
}
else if(islower(str[i]))
{
num[i] = str[i] - 'a' + 10;
}
else if(isupper(str[i]))
{
num[i] = str[i] - 'A' + 10;
}
}
    int res_len = 0;
    int i,j;
for(int m = len; m > 0;)
    {
    int remainder = 0;
for(i = 0; i < m; i++)
{
remainder = remainder * old_binary + num[i];
save_num[i] = remainder / new_binary;
remainder %= new_binary;    // 取得每一次除的结果的余数
}
j = i;  // 储存本轮除运算结束后的商的位数,为下轮准备
result[res_len++] = remainder;    // 最后一次取得的余数作为本轮的取余结果储存并等待输出
i= 0;
while(i < j && 0 == save_num[i])    // 去除商中的前导 0
{
i++;
}
memset(num,sizeof(num));    // 清除本轮的除数
m = 0;
for(i; i < j; i++)
{
num[m++] = save_num[i];     // 将这一轮的商作为下一轮的除数,得到下一轮除数
}


memset(save_num,sizeof(save_num));  // 清除这一轮的商,为下一轮做准备
}
return res_len;
}


void Output(int len)   // 高位倒序输出结果
{
for(int i = len - 1; i >= 0; i--)
{
cout << (result[i] > 9 ? (char) (result[i] + 55) : (char) (result[i] + '0'));
}
}


int main()
{
string str;
cin >> str;
Output(Trans(str));
return 0;
}

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读