Given only putchar (no sprintf, itoa, etc.) write a routine putlong that prints out an unsigned long in decimal.
A:
Solution 1: iteratively divide
Step 1: find the max 10^k , that it can be divided
Step 2: print the division, recall the mod,
    static void printLong(long a) {
        if (a < 0) {
            return;
        }
        if (a == 0) {
            printChar('0');
        } else {
            int tens = 1;
            while (a / tens >= 10) {
                tens *= 10;
            }
            while (tens > 0) {
                int b = (int) (a / tens);
                printChar((char) (b + '0'));
                a = a % tens;
                tens /= 10;
            }
        }
    }
    static void printChar(char ch) {
        System.out.print(ch);
    }
Solution 2: recursive call its 1/ 10
    static void printLong(long a) {
        // assume that input is unsigned integer
        if (a < 10) {
            printChar((char) (a + '0'));
        } else {
            printLong(a / 10);
            printChar((char) (a % 10 + '0'));// print the last char
        }
    }
    static void printChar(char ch) {
        System.out.print(ch);
    }
-----------------------------------------Problem 2 ----------------------------------
Q:
Print a string in reverse order.
A:
void printReverse(const char *str) {
  if (!*str)
    return;
  printReverse(str + 1);
  putchar(*str);
}

No comments:
Post a Comment