C实现任意进制数的转化

简介: 版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45246025 该实例要求使用C实现一个无符号整数到[2,16]进制数的转换。
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45246025

该实例要求使用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;
}

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

目录
相关文章
给定一个正整数N,将其表示为数字1,3,7,15相加的形式输出。请编码找出使上述数字出现的总次数最少(每个数字可以重复使用)的组合。
给定一个正整数N,将其表示为数字1,3,7,15相加的形式输出。请编码找出使上述数字出现的总次数最少(每个数字可以重复使用)的组合。
|
3月前
|
C语言
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
这篇文章展示了如何使用栈(包括顺序栈和链栈)实现将十进制数值转换成八进制数值的方法,通过C语言编程演示了两种栈的实现方式和使用场景。
用栈实现将一个十进制数值转换成八进制数值。即用该十进制数值除以8,并保留其余数;重复此操作,直到该十进制数值为0为止。最后将所有的余数反向输出就是所对应的八进制数值
创建定长的数字,进制之间转化,二进制,十进制 字符串
创建定长的数字,进制之间转化,二进制,十进制 字符串
|
6月前
|
C++
[C++] 提取字符串中的所有数字并组成一个数
[C++] 提取字符串中的所有数字并组成一个数
139 0
|
6月前
两个方法实现 任意两个进制间相互转换
两个方法实现 任意两个进制间相互转换
29 0
两个方法实现 任意两个进制间相互转换
进制之间的转换
说明:进制之间的转换有多种,我只列出自己常使用的方法。 十进制:十进制是以 0-9 这九个数字组成的,也是我们日常生活中最常见的数字 二进制:二进制是 0 和 1 这两个数字组成的,一般常用于计算机中表示 八进制:八进制是 0-7 这八个数字组成的,为了区分,一般开头以 0 开头 十六进制:十六进制由 0-9 和A-F 组成,从 A-F 为 10-15,为了区别,开头以 0x 开头
|
算法 Python
一日一技:如何统计一个数字的二进制值里面有多少个1
一日一技:如何统计一个数字的二进制值里面有多少个1
238 0
|
人工智能
进制数转换知识点总结
二进制和十六进制 用0和1表示各种信息 计算机的电路由逻辑门电路组成。一个逻辑门电路可以看成一个开关,每个开关的状态是“开"(高电位)或“关”(低电位),即对应于1或0
155 0
【c++】关于数值进制以及进制之间转化
【c++】关于数值进制以及进制之间转化
196 0
【c++】关于数值进制以及进制之间转化