• 面试题目以字符输出十进制数


       1: $ cat printd.C
       2: #include <stdio.h>
       3: // First version
       4: void printd(long d) {
       5:  
       6:     if (d < 0) {
       7:         putchar ('-');
       8:         d = -d;
       9:     }
      10:     if (d / 10)
      11:         printd (d / 10);
      12:     //putchar (d % 10 + '0');
      13:     putchar ("0123456789"[d % 10]);
      14: }
      15:  
      16: /* Second Version
      17: void printneg (int d);
      18: 
      19: void printd (int d) {
      20:     if (d <0) {
      21:         putchar ('-');
      22:         printneg (d);
      23:     }
      24:     else
      25:         printneg (-d);
      26: }
      27: 
      28: void printneg (int d) {
      29:     if (d <= -10)
      30:         printneg (d/10);
      31:     putchar ("0123456789"[-(d % 10)]);
      32: }
      33: */
      34:  
      35: int main () {
      36:     int a = 20;
      37:     int b = 303;
      38:     int c = -10;
      39:     int d = -2147483648; //max value for 4bytes int
      40:  
      41:     printd(a);
      42:     puts("");
      43:     printd(b);
      44:     puts("");
      45:     printd(c);
      46:     puts("");
      47:     printd(d);
      48:     puts("");
      49:     printf("\nc in original format: %d!\n", c);
      50:     printf("The decimal format of '0' is: %d!\n", '0');
      51:     printf("The decimal format of 'a' is: %d!\n", 'a');
      52:     printf("The decimal format of 'A' is: %d!\n", 'A');
      53:  
      54: }

    1.  之所以用0123456789不用d % 10 + ‘0’是因为避免某些特殊的character set造成错误

    2.  因为一个变量当作为有符号数时可以表示的负数比正数的绝对值更大一些,比如8bit,可以表示-128~127。所以第一个版本当碰到最小值的时候,转成正数会overflow。第二个版本直接用负数作为输出,可以输出负的最大值。

    Version1:

    image

    Version2:

    image

  • 相关阅读:
    Ubuntu开机自动挂载Windows分区
    Ubuntu 修改hosts
    线程安全
    可重入
    java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet问题
    两数相加
    2017-2018 ACM-ICPC, Central Europe Regional Contest (CERC 17)
    Anniversary party
    k倍区间
    算法训练 素因子去重
  • 原文地址:https://www.cnblogs.com/dracohan/p/3024474.html
Copyright © 2020-2023  润新知