主题:一道难题
laiweihui
[专家分:0] 发布于 2007-09-26 16:52:00
是在[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个回复)
沙发
abcwuhang [专家分:1840] 发布于 2007-10-01 20:41:00
弱题...
用string读入,若length=1则直接输出;若length=2则先输十位再加'SHI'加个位数.
(输出可用CASE判断...)
板凳
Matodied [专家分:7560] 发布于 2007-10-03 10:47:00
有本事你的范围扩大到0-99999999,你不会了吧?
3 楼
angwuy [专家分:2280] 发布于 2007-10-04 19:22:00
有本事不用汉语拼音,用英语!
4 楼
无所不能 [专家分:270] 发布于 2007-10-04 21:27:00
[quote]弱题...
用string读入,若length=1则直接输出;若length=2则先输十位再加'SHI'加个位数.
(输出可用CASE判断...)[/quote]
最好能在文件里输出来,这样会更好一些
5 楼
Matodied [专家分:7560] 发布于 2007-10-04 22:23:00
[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.
我来回复