洛谷 P1617 爱与愁的一千个伤心的理由
题目背景
(本道题目隐藏了两首歌名,找找看哪~~~)
《爱与愁的故事第一弹·heartache》第二章。
经历了心痛后,爱与愁大神不行了。
题目描述
月落乌啼问爱与愁大神为什么,爱与愁大神写了一个数字n(n<=9999),说翻译成英语就知道为什么了。月落乌啼接过这个数字后,本想翻译成英语,但是班主任叫他去帮个忙。他想尽快知道答案,于是这个艰巨的任务就拜托你了。
标准美式英语,仅在末两位<=10时加and且没有连字符。
输入输出格式
输入格式:
只有一行,一个数n(n<=9999)
输出格式:
一行英文,表示n翻译成英语的答案
输入输出样例
输入样例#1: 复制
①
5208
②
5280
③
5000
输出样例#1: 复制
①
five thousand two hundred and eight
②
five thousand two hundred eighty
③
five thousand
说明
输出行初不大写。按标准美式英语输出,即两个非零的数中间没零则不加and,行末无句号。
思路:模拟,这个题的难度标号有问题。
#include<map> #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n,s; map<int,string>ma; void pre(){ ma[1]="one";ma[2]="two";ma[3]="three";ma[4]="four";ma[5]="five"; ma[6]="six";ma[7]="seven";ma[8]="eight";ma[9]="nine";ma[10]="ten"; ma[11]="eleven";ma[12]="twelve";ma[13]="thirteen";ma[14]="fourteen";ma[15]="fifteen"; ma[16]="sixteen";ma[17]="seventeen";ma[18]="eighteen";ma[19]="ninetee";ma[20]="twenty"; ma[30]="thirty";ma[40]="forty";ma[50]="fifty";ma[60]="sixty";ma[70]="seventy"; ma[80]="eighty";ma[90]="ninety";ma[100]="hundred";ma[1000]="thousand"; } int main(){ pre(); scanf("%d",&n); if(n==0){ cout<<"zero";return 0; } if(n/1000){ cout<<ma[n/1000]<<" "<<ma[1000]<<" ";s++;n=n%1000; } if(n/100){ cout<<ma[n/100]<<" "<<ma[100]<<" ";s++;n=n%100; } else{ if(s&&n) cout<<"and ";s=0; } if(n/10>=2||n/10==0){ if(n/10){ cout<<ma[n/10*10]<<" ";s++;n=n%10; } else{ if(s&&n) cout<<"and ";s=0; } if(n) cout<<ma[n]; } else cout<<ma[n]; return 0; }
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。