博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进制转换的那些事儿
阅读量:5962 次
发布时间:2019-06-19

本文共 2007 字,大约阅读时间需要 6 分钟。

进制转换的那些事儿

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

以下解释部分来源:知乎网友

进制这事儿,说到底就是位值原理,即:同一个数字,放在不同的数位上,代表不同大小的“量”。例如:十进制中,百位上的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;            }

转载地址:http://mqjax.baihongyu.com/

你可能感兴趣的文章
解决vim中不能使用小键盘
查看>>
jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
查看>>
我的友情链接
查看>>
CentOS定时同步系统时间
查看>>
批量删除用户--Shell脚本
查看>>
Eclipse Java @Override 报错
查看>>
知道双字节码, 如何获取汉字 - 回复 "pinezhou" 的问题
查看>>
linux中cacti和nagios整合
查看>>
Python高效编程技巧
查看>>
js中var self=this的解释
查看>>
Facebook 接入之获取各个配置参数
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
事情的两面性
查看>>
只要会营销,shi都能卖出去?
查看>>
sed单行处理命令奇偶行输出
查看>>
VC++深入详解学习笔记1
查看>>
安装配置discuz
查看>>
线程互互斥锁
查看>>
KVM虚拟机&openVSwitch杂记(1)
查看>>
win7下ActiveX注册错误0x80040200解决参考
查看>>