一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

一亩三分地官方iOS手机应用下载
查看: 1120|回复: 10
收起左侧

新鲜Amazon面经(数数字)

[复制链接] |试试Instant~ |关注本帖
yyboyz 发表于 2014-10-28 03:15:47 | 显示全部楼层 |阅读模式

2014(10-12月) 码农类 本科 全职@Amazon - 网上海投 - 技术电面 |Fail

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
哎 今天电面Amazon, 遇到一题数数字 不知道是我太水了还是怎么了  感觉电面这题有点难, 地里大牛比较多 请大家讨论一下:
Write a program that, given a number, will translate it into a string representing how one would say it. E.g.
input: 123
output: "one hundred twenty three"
. From 1point 3acres bbs



我的代码量超过100行了 还没写出来.1point3acres缃
不知道有同学有正确解法吗?贴上来讨论一下




补充内容 (2014-10-28 03:22):
我觉得考虑怎么把数字说出来很蛋疼  10-19这些都不规律  各种case用用好几个switch  
考虑越多越头大
rettyye3 发表于 2014-10-28 04:13:15 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
  1. string NUMS[] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
  2.     "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};

  3. string TENS[] = {"zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};

  4. string thousand[] = {"zero", "thousand", "million", "billion", "trillion"};

  5. string func(int x)
  6. {
  7.     int hundreds = x/100;
  8.     int res = x%100;
  9.     int tens = x%100/10;
  10.     int ones = x%10;
  11.     string result = "";
  12.     if(hundreds != 0) result = NUMS[hundreds]+" hundred";
  13.     if(res != 0)
  14.     {
  15.         if(result != "") result = result + " ";.鐣欏璁哄潧-涓浜-涓夊垎鍦
  16.         if(res < 20)
  17.             result = result + NUMS[res];
  18.         else
  19.             result = result + TENS[tens] + "-" + NUMS[ones];
  20.     }
  21.     return result;
  22. }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

  23. string translate(int x)
  24. {
  25.     string result = "";
  26.     if(x == 0) result = "zero"; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  27.     else
  28.     {
  29.         int i = 0;
  30.         while(x != 0)
  31.         {
  32.             int m = x%1000;
  33.             if(m != 0)
  34.             {
  35.                 if(result != "") result = " " + result;
  36.                 if(i == 0)
  37.                     result = func(m) + result;
  38.                 else
  39.                     result = func(m) + " " + thousand[i]  + result;
  40.             }        
  41.             i ++;
  42.             x = x/1000;
  43.         }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  44.     }
  45.     return result;
  46. }
复制代码
目前考虑到的corner case就是0, 需要输出zero, 不知道还有没有其他复杂的corner case, 其他是要考虑负数? 小数?
回复 支持 反对

使用道具 举报

 楼主| yyboyz 发表于 2014-10-28 04:40:44 | 显示全部楼层
关注一亩三分地微博:
Warald
rettyye3 发表于 2014-10-28 04:13. From 1point 3acres bbs
目前考虑到的corner case就是0, 需要输出zero, 不知道还有没有其他复杂的corner case, 其他是要考虑负数?  ...

不考虑负数和小数  你这代码能运行吗?
回复 支持 反对

使用道具 举报

rettyye3 发表于 2014-10-28 05:15:29 | 显示全部楼层
yyboyz 发表于 2014-10-28 04:40
不考虑负数和小数  你这代码能运行吗?

可以啊... 我本地跑过了, 有什么问题吗?
回复 支持 反对

使用道具 举报

hydejyy 发表于 2014-10-28 05:19:31 | 显示全部楼层
CTCI 17.7 刚刷到
求职神器indeed - 在全球最大的求职网站找找适合你的工作?
回复 支持 反对

使用道具 举报

 楼主| yyboyz 发表于 2014-10-28 05:27:55 | 显示全部楼层
居然是原题...What the f***..
回复 支持 反对

使用道具 举报

lixiang.xjtu 发表于 2014-10-28 05:34:08 | 显示全部楼层
这题尼玛还能再无聊点吗。我特地没看这题,因为我觉得太无聊了
回复 支持 反对

使用道具 举报

owenwilder 发表于 2014-10-28 05:51:29 | 显示全部楼层
原题啊。这只要取余做各种判断就成吧。不过确实很麻烦,电话考这题确实不好写。
回复 支持 反对

使用道具 举报

王可雪 发表于 2014-10-28 06:24:52 | 显示全部楼层
  1. #include <iostream>. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  2. using std::cout;
  3. using std::endl;
  4. using std::string;

  5. const string dict[] = {"zero","one","two","three","four","five","six","seven","eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen", "twenty"};
  6. . 鍥磋鎴戜滑@1point 3 acres
  7. class SpeakNum{
  8. public:
  9.   string speakNum(int n) {
  10.     string ans;
  11.     if (n < 0) {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  12.       ans += "minus ";
  13.       n = -n;
  14.     } 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  15.     if (n / 1000000) {
  16.       if (ans.empty())
  17.                ans += " ";
  18.       ans += speakNum(n / 1000000);
  19.       ans += "million";
  20.     }
  21.     n %= 1000000;
  22.     if (n / 1000) {. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  23.       if (!ans.empty())
  24.                ans += " ";
  25.       ans += speakNum(n / 1000);
  26.       ans += " thousand";
  27.     }. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  28.     n %= 1000;
    . from: 1point3acres.com/bbs
  29.     if (n / 100) {. visit 1point3acres.com for more.
  30.       if (!ans.empty())
  31.                ans += " ";
  32.       ans += dict[n / 100];
  33.       ans += " hundred";
  34.     }
  35.     n %= 100;
  36.     if (n <= 20) {
  37.       if (!ans.empty()). 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  38.                ans += " ";
  39.       ans += dict[n];
  40.     }
  41.     else {. 鍥磋鎴戜滑@1point 3 acres
  42.       if (!ans.empty()). visit 1point3acres.com for more.
  43.                ans += " ";
  44.       ans += dict[10+n/10];. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  45.       ans.replace(ans.end()-3, ans.end(), "y");
  46.       if (n / 10) {
  47.            if (!ans.empty())
  48.                ans += " ";
  49.                ans += dict[n % 10]; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
  50.       }
  51.     }. 鍥磋鎴戜滑@1point 3 acres
  52.     return ans;
  53.   }
  54.   
  55. };
复制代码
回复 支持 反对

使用道具 举报

MYcolting 发表于 2014-11-9 10:17:46 | 显示全部楼层
google “Program to convert a given number to words”就会有详细解释了
public static string NumberToWords(int number)
. 鍥磋鎴戜滑@1point 3 acres{
    if (number == 0)
        return "zero";

    if (number < 0).鐣欏璁哄潧-涓浜-涓夊垎鍦
        return "minus " + NumberToWords(Math.Abs(number)); 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

    string words = "";. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴

    if ((number / 1000000) > 0). 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
    {
        words += NumberToWords(number / 1000000) + " million ";
        number %= 1000000;
    }
. 鍥磋鎴戜滑@1point 3 acres
    if ((number / 1000) > 0)
    {.鐣欏璁哄潧-涓浜-涓夊垎鍦
        words += NumberToWords(number / 1000) + " thousand ";
        number %= 1000;
    }

    if ((number / 100) > 0)
    {. From 1point 3acres bbs
        words += NumberToWords(number / 100) + " hundred ";
        number %= 100;
    }

    if (number > 0). more info on 1point3acres.com
    {. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
        if (words != ""). more info on 1point3acres.com
            words += "and ";

        var unitsMap = new[] { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" };
        var tensMap = new[] { "zero", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" };
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
        if (number < 20)
            words += unitsMap[number];
        else. from: 1point3acres.com/bbs
        {
            words += tensMap[number / 10];
            if ((number % 10) > 0)
                words += "-" + unitsMap[number % 10];
        }
    }

    return words;
}
回复 支持 反对

使用道具 举报

harry528 发表于 2014-12-18 07:23:57 | 显示全部楼层
http://www.easysurf.cc/cnvert18.htm
参考这个网页的html<script> source code.
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-3-28 10:34

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表