首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >方案-如何将数据结构应用于两个罗马数字对象(字母和值)的组合,以生成两个字符的罗马数字?

方案-如何将数据结构应用于两个罗马数字对象(字母和值)的组合,以生成两个字符的罗马数字?
EN

Stack Overflow用户
提问于 2015-02-09 06:16:34
回答 1查看 66关注 0票数 0

我试图解决以下问题:

编写一个名为form-rn的函数,它消耗两个Roman-Numeral对象(digit1digit2),并生成由digit1digit2从左到右读取的值所表示的双字符Roman-Numeraldigit1digit2的字符串值必须是单个字母( I、V、X、L、C、D或M之一)。 例如: (表格-rn(作罗马数字"C“100) (作罗马数字"C”100)) 生成(make-Roman-numeral "CC" 200),并且 (表格-rn(作罗马数字"X“10) (作罗马数字"L”50)) 产生(make-Roman-numeral "XL" 40)

到目前为止,我尝试了几件事:

代码语言:javascript
复制
(define II (make-Roman-numeral "II" 2))
(define IV (make-Roman-numeral "IV" 4))

这是试图产生罗马数字组合,但我意识到,这可能不是我应该采取的方法。

代码语言:javascript
复制
(make-Roman-numeral 'I 1)
(make-Roman-numeral 'V 5)

我想,如果我必须分别定义每个罗马数字,但它不应该是像"I“这样的单个字符,而是应该是像"IV”这样的组合。

代码语言:javascript
复制
(define (form-rn digit1 digit2)
  (cond
    [(> digit1 digit2) (+ (Roman-numeral-value digit1) (Roman-numeral-value digit2))]))

我考虑了一些条件,因为问题是,如果第一个符号比另一个符号大,那么两个符号加起来,但是如果第二个符号大于第一个符号,那么较大符号的值减去较小符号的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-09 06:46:10

你的最后一次尝试绝对在正确的轨道上!几个音符

  1. 这个问题要求您从您的Roman-numeral函数返回一个form-rn对象,因此您需要从它内部调用make-Roman-numeral
  2. 您需要分别处理digit1大于digit2和逆的情况。

为了把字母加在一起,我们可以只使用string-append。要找到新的value,我们可以使用cond检查哪个数字更大。然后,我们只需要将计算出来的两个新值合并到一个新的Roman-numeral对象中。

你可以这样做:

代码语言:javascript
复制
(define (form-rn digit1 digit2)
  (define new-letters (string-append (Roman-numeral-letters digit1) (Roman-numeral-letters digit2)))
  (define new-values
    (let ([value1 (Roman-numeral-value digit1)]
          [value2 (Roman-numeral-value digit2)])
      (cond
        [(> value1 value2)
         (+ value1 value2)]
        [else
         (- value2 value1)])))
  (make-Roman-numeral new-letters new-values))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28403849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档