洛谷 P1617 爱与愁的一千个伤心的理由

10 篇文章 0 订阅
6 篇文章 0 订阅

洛谷 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<cstdio>
#include<string>
#include<iostream>
using namespace std;

int n,x,y,z;
string s[20],ss[10];

int main(){
    s[1]="one";s[2]="two";s[3]="three";s[4]="four";
    s[5]="five";s[6]="six";s[7]="seven";s[8]="eight";
    s[9]="nine";s[10]="ten";s[11]="eleven";s[12]="twelve";
    s[13]="thirteen";s[14]="fourteen";s[15]="fifteen";
    s[16]="sixteen";s[17]="seventeen";s[18]="eighteen";
    s[19]="nineteen";ss[2]="twenty";ss[3]="thirty";
    ss[4]="forty";ss[5]="fifty";ss[6]="sixty";
    ss[7]="seventy";ss[8]="eighty";ss[9]="ninety";
    scanf("%d",&n);
    if (n==0) {
        cout<<"zero";
        return 0;
    }
    if (n>=1000){
        cout<<s[n/1000]<<" thousand ";
        n=n%1000;
        x=1;
    }
    if (n>=100){
        cout<<s[n/100]<<" hundred ";
        n=n%100;
        y=1;
    }
    if (n>=10){
        if (x==1&&y==0) cout<<("and ");
        if (n<20) {
            cout<<s[n];
            return 0;
        }
        cout<<ss[n/10]<<" ";
        n=n%10;
        z=1;
    }
    if (n!=0){
        if ((x==1||y==1)&&z==0) cout<<("and ");
        cout<<s[n]; 
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值