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 }
  • 相关阅读:
    关联本地代码的方式 HTTPS和SSH---Gitee码云
    详解elementUI表单的验证规则---vue(基本用法)
    vscode 设置缩进 4
    vue的图片懒加载
    A complete log of this run can be found in问题解决
    简单直观的搞懂Vue3的ref、reactive、toRef、toRefs
    vue-cli3.0 引入外部字体并使用
    迅为与龙芯强强联合匠心之作iTOP-2K1000开发板正式发布
    迅为RK3399开发板外接固态硬盘测试
    迅为i.MX6Q开发板Ubuntu20.04 Can通信
  • 原文地址:https://www.cnblogs.com/llccbb1/p/9568880.html
Copyright © 2011-2022 走看看