zoukankan      html  css  js  c++  java
  • C语言实例解析精粹学习笔记——18

    《C语言实例解析精粹》中编译环境采用的是Turbo C 2.0。但是这个编译器年代久远,较新的编译器对书中的某些例子支持不好,在学习的时候同时做一些笔记。

    实例18:将一个无符号整数转换为任意d进制(d在2~16之间)。

    主要思路:对无符号整数n求d的余数,就能得到n的d进制的最低位数字,重复上述步骤,直至n为0。依此得到n的d进制表示的最低位至最高位数字,由数字转换成字符,得到结果。

     1 /*函数trans将无符号整数n转换成d进制(2<=d<=16)
     2 表示的字符串s*/
     3 #define M sizeof(unsigned int)*8 //将无符号数转换为字符串,每个字符8位
     4 int trans(unsigned n, int d, char s[])
     5 {
     6     static char digits[] = "012345678ABCDEF";
     7     char        buf[M+1];
     8     int         j, i = M;
     9     
    10     if(d<2 || d>16)
    11     {
    12         s[0] = '\0'; //字符串的截至位
    13         return 0;
    14     }
    15     
    16     buf[i] = '\0';
    17     do
    18     {
    19         buf[--i] = digits[n%d];
    20         n /= d;
    21     }while(n);
    22     /*将工作数组中的字符串复制到s*/
    23     for(j=0; (s[j]=buf[i]) != '\0'; j++,i++);
    24     return j;
    25 }
    26 
    27 int main()
    28 {
    29     unsigned int num = 0;
    30     int          scale[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,1}; //进制2~16
    31     char         str[33];
    32     int          i;
    33     clrscr();   //清屏函数只在Turbo中使用 采用的方案是将其改为system("cls")
    34                 //但实际测试中此程序是否由这句对结果并没有什么影响。
    35     puts("Please input a number to translate:");
    36     scanf("%d", &num);
    37     printf("The number you input is %d.\nThe translation result are:\n",num);
    38     //此循环用来测试,显示同一个无符号整数转换成不同进制的结果。
    39     for(i=0; i<sizeof(scale)/sizeof(scale[0]); i++)
    40     {
    41         if(trans(num, scale[i], str))
    42             printf("%5d = %s(%d)\n",num,str,scale[i]);
    43         else
    44             printf("%5d => (%d) Error!\n",num,scale[i]);
    45     }
    46     printf("\nPress any key to quit...\n");
    47     return 0;
    48 }
  • 相关阅读:
    初步掌握Yarn的架构及原理(转)
    CORS 专题
    WebSocket是一种协议
    InputStream中read()与read(byte[] b)(转)
    listview异步加载sd卡图片
    ListView getView中放置多个item和getItemViewType的用法
    Android ListView异步加载数据
    android sqlite 一次创建多个表
    Android Adapter的getViewTypeCount和getItemViewType
    Android 获取SDCard上图片和视频的缩略图
  • 原文地址:https://www.cnblogs.com/llccbb1/p/9568880.html
Copyright © 2011-2022 走看看