无符号十进制整数转换成任意进制数
来源:互联网 发布:一知f君百度网盘 编辑:程序博客网 时间:2024/05/11 15:35
题目:将一个无符号整数转换为任意 d 进制数( 2 ≤ d ≤ 16 )。
思路:先举个例子。十进制100怎么转换为二进制呢?
记住:d进制的数就是0~(d-1)。
一般都是用辗转相除法(应该是叫这个名字),我比较喜欢这样写,比较直观:
`
这样我们就很清楚地知道是一直在除以2,直至被除数为0。
我们就将余数储存在一个数组里,到时候再将数组逆序输出,则100的二进制数1100100就能得到!
其它进制也一样,不过是除数改变而已。
所以步骤就是:
1.将余数储存在数组里
2.将数组倒置
3.输出数组
下面给出代码:
/* 实现十进制转换任意进制 */#include <stdio.h>#include <string.h>#define MAX sizeof(unsigned)*8 - 1/* 将十进制n转换成d进制 */void trans(unsigned n, int d, char srt[]){char*a = "0123456789ABCDEF";inti = 0;while (1){srt[i++] = a[n%d];n = n / d;if (n == 0)break;}srt[i] = '\0';}/* 将转换的数组倒置 */void reversion(char srt[], char dst[]){inti = 0;intj, k;j = k = strlen(srt);while (1){dst[i] = srt[--j];if (i == k - 1)break;i++;}dst[k] = '\0';}int main(void){intn;intd;charsrt[MAX];chardst[MAX];printf("Please input a nuber:");scanf("%d", &n);for(d = 2; d <= 16; d++){trans(n, d, srt);reversion(srt, dst);printf("%5d = %s<%d>\n", n, dst, d);}return 0;}
结果运行如下:
虽然这个程序还有很多地方可以优化,但总体思路应该明确了。
值得注意的是:一开始我写出来的时候运行结果却不正确,然后我仔细地看了一下代码才发现原来字符串数组后没有加上'\0'!在C语言里,这是一个必须得留心的问题,而且如果程序很大的话,会很难发现的,所以在这里提个醒。
0 0
- 无符号十进制整数转换成任意进制数
- 将十进制无符号整数转化为任意进制数(大数)
- 将任意的十进制整数转换成任意R进制数(R在2-16之间)
- 32无符号整数转换成字符串
- 十进制数转换成任意进制数
- php将ip转换成无符号整数
- php将ip转换成无符号整数
- 整数十进制转换成二进制
- 字符串转换成十进制整数
- 字符串转换成十进制整数
- 字符串转换成十进制整数
- 字符串转换成十进制整数
- 十进制数转换为任意进制数
- 将十进制数转换为任意进制数
- 字符串转换成十进制整数 十六进制转换十进制
- 有符号整数、无符号整数的转换以及小数据转换为大数据
- 字符数组md5[4]转换成uint32_t的无符号整数转化?
- ip地址转换成十进制整数
- Jquery mobile中通过按钮清空单选框/复选框的选中状态
- Android Activity之间跳转与传值
- 无所不能的Java系列文章
- Android 自定义漂亮的圆形进度条
- [译]Google C++编程风格指南(七)
- 无符号十进制整数转换成任意进制数
- (转载)linux命令之四十九ping命令
- 日经春秋 20150123
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- Android上传文件到服务器
- Android学习之路---慢慢整理中......
- 360°全景图展示
- poj 2507 Crossed ladders 二分解方程
- Android Studio 快捷键