zoukankan      html  css  js  c++  java
  • 10进制整数转2,8,16进制

    10进制转2,8,16进制


    注:
    1.笔者在这里只写了整数的进制间转换,小数尚未介绍,有兴趣的可自行查阅
    2.这里用到的自定义函数思想在冒泡排序中以提及,不再加以介绍



    1.十进制转二进制

    十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

    一般用数字0,1表示
    具体做法:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,
    直到商为小于1时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的
    高位有效位,依次排列起来。
    eg:176 =(10110000)
        176/2=88=====余0      0
        88/2=44======余0      0
        44/2=22=======余0     0  ↑  列
        22/2=11=======余0     0  |  排
        11/2=5========余1     1  |  序
        5/2=2=========余1     1  |  逆
        2/2=1=========余0     0
        1/2=0=========余1     1
    

    2.十进制转八进制

    十进制整数转换为八进制整数采用"除8取余,逆序排列"法。

    一般用数字0~7表示
    具体做法:用8整除十进制整数,可以得到一个商和余数;再用8去除商,又会得到一个商和余数,如此进行,
    直到商为小于1时为止,然后把先得到的余数作为八进制数的低位有效位,后得到的余数作为八进制数的
    高位有效位,依次排列起来。
    注:八进制以0开头,例如十进制716 = 八进制01314。
    eg: 716 =(01314)
    
        716/8=89=======余4    4  ↑  列
        89/8=11=======余1     1  |  排
        11/8=1========余3     3  |  序
        1/8=0=========余1     1  |  逆
    

    3.十进制转十六进制

    十进制整数转换为十六进制整数采用"除16取余,逆序排列"法。

    一般用数字0~9和字母A~F(或a~f)表示,其中A~F表示10~15。
    具体做法:用16整除十进制整数,可以得到一个商和余数;再用16去除商,又会得到一个商和余数,如此进行,
    直到商为小于1时为止,然后把先得到的余数作为十六进制数的低位有效位,后得到的余数作为十六进制数的
    高位有效位,依次排列起来。
    注:十六进制以0X或0x开头,例如十进制3225 = 十六进制C99。
    eg: 3225 =(C99)
                                          ↑  列
        3225/16=201=======余9          9  |  排
        201/16=12========余9           9  |  序
        12/16=0=========余12(C)        C  |  逆
    

    4.无限循环程序代码

    	while(1)
    	{
    		主体部分 
    		printf("
    按回车键继续, 按Ctrl + C退出...
    ");
    		getchar(); 
    		getchar(); 
    	}
    
    getchar()是用来吸收回车键的
    

    5.代码实现

    因为十进制转2,8,16的方式相似, 所以笔者在这里写了一个DevNtype函数,来优化代码。

    include<stdio.h>
          //因为两个函数中用都用,且第一个函数得到的i要直接用到第二个函数中所以定义全局变量
    int arr[10000] = {0}, i = 0;
          //因为16进制会用到字母,而2,8进制不会,所以直接写一个数组用来输出转换后的数
    char numtype[17] = "0123456789ABCDEF"; 
    int DecNtype(int n, int type)//n为十进制数字,type是要转换成的类型
    {
    	if(n == 1 && i == 0) arr[i] = 1;//因为1教特殊,所以单挑出来
    		else
    		{
    			arr[i] = n % type;
    			n = n / type;
    			i++;
                                  //用到递归,直到取余等于0才停止,否则重复执行这个函数
    			n == 0 ? arr[i + 1] = 1 : DecNtype(n, type);
    		}	
    }
    
    int main()
    {
    	int type, num, j = 0;
    	while(1)
    	{
    		printf("Input the type of bin(2,8,16): ");//输入进制类型
    		scanf("%d", &type);
    		printf("Input a number: ");//输入十进制数字
    		scanf("%d", &num);
    		DecNtype(num, type);//调用函数做进制转换
    		if(type == 8) printf("0");
    		if(type == 16) printf("0X");
    		for(j = i - 1; j >= 0; j--)//16,8,2进制直接倒序输出
    		{
    			printf("%c", numtype[arr[j]]);
    		}
    		i = 0;
    		printf("
    按回车键继续, 按Ctrl + C退出...
    ");
    		getchar(); 
    		getchar(); 
    	}
    	
    	return 0;
    } 
    
  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/OctopuSS/p/13986898.html
Copyright © 2011-2022 走看看