洛谷 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;
}

 

posted @ 2018-01-07 10:32  一蓑烟雨任生平  阅读(587)  评论(0编辑  收藏  举报