进制转换的那些事儿

bytebuilder
• 阅读 1415

进制转换的那些事儿

进制转换是一种较为特殊的数位拆解

以下解释部分来源:知乎网友
进制这事儿,说到底就是位值原理,即:同一个数字,放在不同的数位上,代表不同大小的“量”。例如:十进制中,百位上的1表示100,十位上的1表示10。
任何进制中,每个数都可以按位权展开成各个数位上的数字乘以对应数位的位权,再相加的形式,如:
  十进制的123=1×100+2×10+3×1
  十进制的9876=9×1000+8×100+7×10+6×1
问:为啥相应的数位是1000、100、10、1?为啥不是4、3、2、1?
答:十进制,满十进一,再满十再进一,因此要想进到第三位,得有10×10;第4位得有10×10×10
这样我们就知道了:
对10进制,从低位到高位,依次要乘以10^0,10^1,10^2,10^3……,也就是1、10、100、1000
对2进制,从低位到高位,依次要乘以2^0,2^1,2^2,2^3……,也就是1、2、4、8……


总之,n进制k转换成 m进制t,只需先将n进制k转换成十进制q,再将十进制q转换成m进制t

题目描述

求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。

输入

输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。

输出

可能有多组测试数据,对于每组数据,输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。

样例输入

15 Aab3 7

样例输出

210306

代码块

int main() {
    int a, b;
    char n[40];
    while (scanf("%d%s%d", &a, n, &b)!=EOF) {
        int size1 = strlen(n);
        
        int res=0;
        for (int i = size1-1; i >= 0; i--)
        {
            int x;
            if (n[i] >= '0' && n[i] <= '9') {
                x = n[i] - '0';
            }
            else if (n[i] >= 'a' &&n[i] <= 'z') {
                x = n[i] - 'a'+10;
            }
            else
            {
                x= n[i] - 'A' + 10;
            }
            
            res += x * pow(a, size1 - i - 1);
        }
        
        char ans[40];
        int size = 0;
        while (res != 0) {
            int t = res%b;
            if (t < 10) {
                ans[size++] = t + '0';
            }
            else {
                ans[size++] = t - 10 + 'A';
            }
            res /= b;
        }
        for (int i = size-1; i>=0 ; i--)
        {
            printf("%c", ans[i]);
        }
        printf("\n");
    }
    return 0;
}

总结

1.字符转换,根据ACSII码,进行数字与字符之间的转换。
            if (n[i] >= '0' && n[i] <= '9') {
                x = n[i] - '0';
            }
            else if (n[i] >= 'a' &&n[i] <= 'z') {
                x = n[i] - 'a'+10;
            }
            else
            {
                x= n[i] - 'A' + 10;
            }
点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4年前
Python 练手 &quot;小例子&quot; 闯关60题!
一、数字1求绝对值绝对值或复数的模In1:abs(6)Out1:62进制转化十进制转换为二进制:In2:bin(10)Out2:'0b1010'十进制转换为八进制:In3:oct(9)Out3:'0o11'十进制转换为十六进制:In4:hex(15)Out4:'0xf'3整数和ASCII互
Irene181 Irene181
4年前
一篇文章带你弄懂Python基础之进制和数据类型
大家好,我是Go进阶者,今天给大家分享一些Python基础(进制和数据类型),一起来看看吧一、进制1、什么是进制?进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tallymark计数)。对于任何一种进制X进制,就表示每一位置上的数运算时都是逢X进一位。十进制是逢十进
DaLongggggg DaLongggggg
4年前
python刷题-特殊的数字
问题描述  153是一个非常特殊的数,它等于它的每位数字的立方和,即153111555333。编程求所有满足这种条件的三位十进制数。输出格式  按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。foriinrange(100,1000):astr(i)0bstr(i)1c
九路 九路
4年前
Java判断一个数是不是快乐数
快乐数的定义:快乐数(happynumber)有以下的特性:在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。以十进制为例:28→2²8²68→6²8²100→1²0²0²132→3²2²13→1²3²10→1²0²137→3
Wesley13 Wesley13
3年前
JS中二进制与十进制的相互转换
今天在做题目的时候遇到了需要十进制转换为二进制,这个我知道用toString可以,但是二进制转换为十进制我一下子就想不起来,网上搜了下,才知道是parseInt可以实现,特此记录下。十进制转换为二进制:varnum100;console.log(num.toString(2));toString()方法可把一个
Wesley13 Wesley13
3年前
Java中byte与16进制字符串的互相转换
ava中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(2322212015),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果newString(H)newStrin
Wesley13 Wesley13
3年前
JAVA位运算
位移动运算符:<<表示左移,左移一位表示原来的值乘2.例如:3<<2(3为int型)1)把3转换为二进制数字00000000000000000000000000000011,2)把该数字高位(左侧)的两个零移出,其他的数字都朝左平移2位,3)在低位(右侧)的两个空位补零。则得到的最终结果是00000000
Wesley13 Wesley13
3年前
C++ 进制转换 十进制十六进制八进制二进制相互转换
思路:1.下面我把相互转换的所有类型都写出来了。实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分。哦,对,自己封装了一个charToDigit函数,主要是将字符转为数字用的。2.十六进制转十进制转八进制:!(https://images2018.cnblogs.c
Stella981 Stella981
3年前
HDOJ 2100 Lovekey
ProblemDescriptionXYZ26进制数是一个每位都是大写字母的数字。A、B、C、…、X、Y、Z分别依次代表一个0~25的数字,一个n位的26进制数转化成是10进制的规则如下A0A1A2A3…An1的每一位代表的数字为a0a1a2a3…an1,则该XYZ26进制数的10进制值就为m=a0\26
Wesley13 Wesley13
3年前
C语言基础之ASCII编码(3)
什么是字符集和字符编码?前面我们已经讲到,计算机是以二进制的形式来存储数据的,它只认识0和1两个数字,我们在屏幕上看到的文字,在存储之前都被转换成了二进制(0和1序列),在显示时也要根据二进制找到对应的字符。可想而知,特定的文字必然对应着固定的二进制,否则在转换时将发生混乱。那么,怎样将文字与二进制对应起来
贾蔷 贾蔷
1个月前
手把手教你实现进制转换(C++代码注释+小白友好教程)
一、简介和特点是编程中常见的操作,即将数值从一种进制(如十进制)转换为另一种进制(如、十六进制等)。本了一个通用的进制转换工具,具有以下特点:1.支持小数转换:不仅能转换整数,还能处理小数部分的进制转换(如将0.25转换为二进制)。2.灵活进制设定:用户可