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

本文共 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://zjvml.baihongyu.com/

你可能感兴趣的文章
SSE图像算法优化系列十四:局部均方差及局部平方差算法的优化。
查看>>
linux下ftp(vsftpd)添加用户及设置权限详细步骤
查看>>
水平居中
查看>>
js匿名函数,闭包
查看>>
使用Python写Windows Service服务程序
查看>>
Chrome 开发者控制台使用技巧
查看>>
Android代码内存优化建议-Android官方篇
查看>>
基于.Net平台C#的微信网页版API
查看>>
jq购物车结算功能
查看>>
leetcode725
查看>>
Android WebRTC 音视频开发总结(三)-- 信令服务和媒体服务
查看>>
EntityFramework IEnumerable,IQueryable ,Include
查看>>
memtrack: Couldn't load memtrack module (No such file or directory) 的问题解决
查看>>
Visio画图(一):UML用例图
查看>>
Docker入门(五):Swarms
查看>>
盘点:#AzureChat - 虚拟机和自动伸缩
查看>>
【PHP设计模式 04_GongChang.php】 工厂方法
查看>>
架构阅读笔记8
查看>>
awk
查看>>
FCC学习笔记(三)
查看>>