• 《Cracking the Coding Interview》——第17章:普通题——题目7


    2014-04-28 23:28

    题目:给定一个数字,用英语把它读出来。

    解法:ZOJ上有相反的题目。如果我要用中文读书来呢?

    代码:

      1 // 17.7 Read an integer in English.
      2 #include <map>
      3 #include <string>
      4 using namespace std;
      5 
      6 map<int, string> m;
      7 
      8 void init()
      9 {
     10     m[0] = "zero";
     11     m[1] = "one";
     12     m[2] = "two";
     13     m[3] = "three";
     14     m[4] = "four";
     15     m[5] = "five";
     16     m[6] = "six";
     17     m[7] = "seven";
     18     m[8] = "eight";
     19     m[9] = "nine";
     20     m[10] = "ten";
     21     m[11] = "eleven";
     22     m[12] = "twelve";
     23     m[13] = "thirteen";
     24     m[14] = "fourteen";
     25     m[15] = "fifteen";
     26     m[16] = "sixteen";
     27     m[17] = "seventeen";
     28     m[18] = "eighteen";
     29     m[19] = "nineteen";
     30     m[20] = "twenty";
     31     m[30] = "thirty";
     32     m[40] = "forty";
     33     m[50] = "fifty";
     34     m[60] = "sixty";
     35     m[70] = "seventy";
     36     m[80] = "eighty";
     37     m[90] = "ninety";
     38     int i, j;
     39     for (i = 2; i <= 9; ++i) {
     40         for (j = 1; j <= 9; ++j) {
     41             m[i * 10 + j] = m[i * 10] + "-" + m[j];
     42         }
     43     }
     44 }
     45 
     46 void readNumber(int n)
     47 {
     48     if (n == 0) {
     49         return;
     50     }
     51     // here n is limited between [0, 999];
     52     int a, b, c;
     53     
     54     a = n / 100;
     55     b = n % 100 / 10;
     56     c = n % 10 / 1;
     57     
     58     if (a > 0) {
     59         printf("%s hundred ", m[a].c_str());
     60         if (b != 0 || c != 0) {
     61             printf("and ");
     62         }
     63     }
     64     if (b * 10 + c > 0) {
     65         printf("%s ", m[b * 10 + c].c_str());
     66     }
     67 }
     68 
     69 int main()
     70 {
     71     init();
     72     int n, n0;
     73     
     74     while (scanf("%d", &n) == 1) {
     75         if (n == 0) {
     76             printf("zero 
    ");
     77             continue;
     78         }
     79         if (n < 0) {
     80             printf("minus ");
     81             n = -n;
     82         }
     83         n0 = n;
     84         if (n >= 1000000000) {
     85             readNumber(n / 1000000000);
     86             printf("billion ");
     87             n = n % 1000000000;
     88         }
     89         if (n >= 1000000) {
     90             readNumber(n / 1000000);
     91             n = n % 1000000;
     92             printf("million ");
     93         }
     94         if (n >= 1000) {
     95             readNumber(n / 1000);
     96             n = n % 1000;
     97             printf("thousand ");
     98         }
     99         if (n0 >= 1000 && n / 100 == 0) {
    100             printf("and ");
    101         }
    102         readNumber(n);
    103         putchar('
    ');
    104     }
    105     
    106     return 0;
    107 }
  • 相关阅读:
    Java面试——VUE2&VUE3概览
    Golang 面试笔录
    数据科学完整流程概述
    周志华 机器学习 西瓜书 主要符号表
    数据分析师的发展方向?
    404 GET /nbextensions/jupyter-js-widgets/extension.js
    如何使用Conda源快速安装PyTorch?
    美化React组件之CSS Modules
    react如何全局配置sass
    nuxt api缓存,组件缓存,页面缓存
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3698254.html
Copyright © 2020-2023  润新知