回 帖 发 新 帖 刷新版面

主题:一道难题

是在[url=http://mail.bashu.cn:8080/JudgeOnline]http://mail.bashu.cn:8080/JudgeOnline[/url]
编一个“念数字”的程序,它能让计算机完成以下工作:当你输入一个0至99之间的数后,计算机就会用汉语拼音印出这个数。如果输入的数不在0到99之间,就印出“CUO LE”

Input 

35

Output 

SAN SHI WU 

回复列表 (共5个回复)

沙发

弱题...
用string读入,若length=1则直接输出;若length=2则先输十位再加'SHI'加个位数.
(输出可用CASE判断...)

板凳

有本事你的范围扩大到0-99999999,你不会了吧?

3 楼

有本事不用汉语拼音,用英语!

4 楼

[quote]弱题...
用string读入,若length=1则直接输出;若length=2则先输十位再加'SHI'加个位数.
(输出可用CASE判断...)[/quote]
最好能在文件里输出来,这样会更好一些

5 楼

[quote]有本事不用汉语拼音,用英语![/quote]

用英语也蛮简单的……
先读入1-12的英语表示,如果输入的数在1-12之间就直接输出读入的12个单词,如果是13-19就加上后缀(不过13、15和18好像有点特殊),20-50的整十数特殊,直接读入,60-90的加后缀,剩下的应该能处理了。

程序:
CONST
    a: ARRAY[1..12] OF STRING =
    ('one', 'two', 'three', 'four', 'five', 'six',
     'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve');
    b: ARRAY[2..5] OF STRING =
    ('twen', 'thir', 'for', 'fif');
VAR
   n: SHORTINT; s: STRING;
BEGIN
    READLN(n);
    IF (n < 0) OR (n > 99) THEN BEGIN WRITELN('WRONG'); HALT; END;
    IF n = 0 THEN BEGIN WRITELN('zero'); HALT; END;
    IF n <= 12 THEN BEGIN WRITELN(a[n]); HALT; END;
    IF (n >= 13) AND (n < 20) THEN BEGIN
       IF (n <> 13) AND (n <> 15) THEN s := a[n MOD 10] ELSE s := b[n MOD 10];
       IF n <> 18 THEN s := s + 't';
       WRITELN(s + 'een');
       HALT;
    END;
    IF n >= 20 THEN BEGIN
       IF n <= 50 THEN s := b[n DIV 10] ELSE s := a[n DIV 10];
       IF n DIV 10 <> 8 THEN s := s + 't';
       WRITE(s + 'y');
       IF n MOD 10 <> 0 THEN WRITELN('-', a[n MOD 10]);
       HALT;
    END;
END.

我来回复

您尚未登录,请登录后再回复。点此登录或注册