文档章节

C实现任意进制数的转化

陈洪波
 陈洪波
发布于 2015/05/19 19:34
字数 480
阅读 3
收藏 0

该实例要求使用C实现一个无符号整数到[2,16]进制数的转换。这个还是比较好想的,就是对该无符号整数不断的斤进制数d取余数,取商,一直做这样的运算,直到商为0为止,将所有的余数按照从后往前的顺序穿起来,就是转换后的进制数。

下面上我的代码:

#include <stdio.h>

/** 用于声明char数组的长度 **/
#define M (sizeof(unsigned int) * 8)

int trans(unsigned int m,int d,char s[]);

/** * @brief main 将一个无符号整数转换成任意d进制数(2 << d << 16) * @return */
int main(void)
{
    /** * 思路:将一个无符号整数m转换成任意d进制数, * 则可以将m除以d,将余数从char数组的最后一位 * 向前保存,同时将商再除以d,以同样的方式进行处理 * 最后得到的数组就是所对应的d进制数 */

    unsigned int m;

    printf("Please enter the digits you want to transform:\n");
    scanf("%d",&m);

    char str[33];

    int i = 0;

    printf("The translate results are:\n");

    for(i = 2;i <= 16;i++){
        int nums = trans(m,i,str);

        printf("%d = ",m);
        int j = 0;
        for(j = 0;j < nums;j++){
            printf("%c",str[j]);
        }

        printf("(%d)\n",i);
    }

    return 0;
}

/** * @brief trans 用于对无符号整数转换 * @param m 要被转换的数字 * @param d 要被转换成的进制数 * @param s 存放被转换后的进制数的数组 * @return 返回转换后进制数的长度,也就是数组的长度 */
int trans(unsigned int m,int d,char str[]){

    if(d < 2 || d > 16){
        //将s置为0
        str[0] = '\0';
        return 0;
    }

    /** 用于保存进制数 **/
    char digits[] = "0123456789ABCDEF";

    int i = M;
    int j = 0;
    char buf[M+1];
    /** 用于保存商 **/
    int s = m;

    buf[i] = '\0';

    //这里使用do...while
    do{
        buf[--i] = digits[s % d];
        s = s / d;
    }while(s);

    //对数组s进行赋值
    for(j = 0;(str[j]=buf[i])!= '\0';j++,i++);

    return j;
}

下面是我的运行结果截图:
这里写图片描述

本文转载自:http://blog.csdn.net/hongbochen1223/article/details/45246025

陈洪波
粉丝 2
博文 76
码字总数 1552
作品 0
济南
程序员
私信 提问
十进制转换为十六进制

十进制转换为十六进制,有3种方式实现,其中两种是使用系统函数,另一种是直接自己编写。 使用系统函数实现要加入#include <stdlib.h>,自己编写则不需要这个头文件。 下面的代码就是3种方式...

wannneg
2016/04/22
62
0
[编程题]进制转换

1、题目内容 [编程题]进制转换 2、题目解析 方法1:将十六进制的数值字符串转换成十进制字符串,用Integer类的 public static int parseInt(String s,int radix) throws NumberFormatExcept...

笨拙的小Q
2016/04/22
547
0
USACO1.2Palindromic Squares(palsquare)

对于1~300的每一个n,计算它的平方数m,将其化为b进制,存入数组a[],然后分别检测是否回文数,如果是,将n转化为b进制,存入数组c[],打印对应的c[],a[]即可。 /ID:jzzlee1PROG:palsquareL...

jzzlee
2012/06/07
32
0
C/C++进制转换超详细

16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 -代码 16转2 由于在二进制的表示方法中,每四位所表示的数的最大值对应16进制的1...

---dgw博客
2017/12/18
0
0
浅谈JS数据类型转换

JavaScript中的数据类型是比较灵活的,所以很多时候会涉及到数据类型转换。这篇文章就简单讲一下JS中各个数据类型之间的转换。 Boolean类型 String类型 Number类型 1、转到Boolean类型 调用 ...

Nicksonlvqq
2017/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker常用命令小记

除了基本的<font color="blue">docker pull</font>、<font color="blue">docker image</font>、<font color="blue">docker ps</font>,还有一些命令及参数也很重要,在此记录下来避免遗忘。 ......

程序员欣宸
昨天
4
0
MAT使用-jvm内存溢出问题分析定位

1.MAT简介: MAT 全称 Eclipse Memory Analysis Tools 是一个分析 Java堆数据的专业工具,可以计算出内存中对象的实例数量、占用空间大小、引用关系等,看看是谁阻止了垃圾收集器的回收工作,...

xiaomin0322
昨天
4
0
内网和外网之间的通信(端口映射原理)

首先解释一下“内网”与“外网”的概念: 内网:即所说的局域网,比如学校的局域网,局域网内每台计算机的IP地址在本局域网内具有互异性,是不可重复的。但两个局域网内的内网IP可以有相同的...

Jack088
昨天
5
0
3.深入jvm内核-原理、诊断与优化-4. GC算法和种类

一、GC算法和种类 GC的概念 GC算法 引用计数法 标记清除 标记压缩 复制算法 可触及性 Stop-The-World GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法 通过引用计算来回收垃圾 使用者...

hexiaoming123
昨天
4
0
MySQL中的哈希索引

Memory中的哈希索引 哈希索引是基于哈希表实现的,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的...

我的眼里只有眼屎
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部