1

我们刚从大学的计划开始,我需要一些帮助来完成我的任务。

我们将编写一个将数字转换为单词的程序,例如 EG: 1 to "one"

它必须适用于 10 ^ 9 以内的所有数字。我不知道如何做到这一点。
我的基本想法是创建某种数组或列表,在其中我将这些数字定义为如下单词:

('ZERO', 0) ('ONE', 1) ('TWO', 2) ('THREE', 3) ('FOUR', 4) ('FIVE', 5) ('SIX', 6)
('SEVEN', 7) ('EIGHT', 8) ('NINE', 9) ('TEN', 10) ('ELEVEN', 11) ('TWELVE', 12)
('THIRTEEN', 13) ('FOURTEEN', 14) ('FIFTEEN', 15) ('SIXTEEN', 16)
('SEVENTEEN', 17) ('EIGHTEEN', 18) ('NINETEEN', 19) ('TWENTY', 20) ('THIRTY', 30)
('FORTY', 40) ('FIFTY', 50) ('SIXTY', 60) ('SEVENTY', 70) ('EIGHTY', 80) 
('NINETY', 90) ('HUNDRED', 100) ('THOUSAND', 1000) ('MILLION', 1000000) 
('BILLION', 1000000000) ('TRILLION', 1000000000000) 
('QUADRILLION', 1000000000000000)

然后以某种方式使用此列表检查输入值并用单词替换数字。

但实现这一点给我带来了一些麻烦。

困扰我的主要问题是,Scheme 是否可以处理子字符串,以及我是否可以制作一个列表,在其中将这些数字定义为单词(因此将 1 定义为一个)。

4

1 回答 1

2
  • 您不能“作弊”并做(定义 1 个),因为 1 已经定义为一个数字:)

  • 我认为您无需担心此问题中的子字符串,您正在从子字符串中构建字符串,而不是相反...

    • 不过,您确实需要进行字符串连接的操作。我不记得他们是如何在方案中做字符串的......

这里唯一的“困难”问题是您需要从英语中编码任意规则,所以......

//pseudocode, doing things the "dumb way" tons of ifs, aka cond
define to_str n = 
    if n == 1 then "one"
    ...
    if n == 3 then "thirteen"
    ..
    if 20 <= n < 30 then
       'twenty-' concatenated to  (to_str (n - 20))
    ...

在获得这样的版本后,您可以考虑通过类似于您在问题中提到的字典或关联列表来抽象重复控制流。

于 2011-11-10T13:39:28.020 回答