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

题目背景

(本道题目隐藏了两首歌名,找找看哪~~~)

《爱与愁的故事第一弹·heartache》第二章。

经历了心痛后,爱与愁大神不行了。

题目描述

月落乌啼问爱与愁大神为什么,爱与愁大神写了一个数字n(n<=9999),说翻译成英语就知道为什么了。月落乌啼接过这个数字后,本想翻译成英语,但是班主任叫他去帮个忙。他想尽快知道答案,于是这个艰巨的任务就拜托你了。

标准美式英语,仅在末两位<=10时加and且没有连字符。

输入格式

只有一行,一个数n(n<=9999)

输出格式

一行英文,表示n翻译成英语的答案

输入输出样例

输入 #1

5208

输出 #1

five thousand two hundred and eight

输入 #2

5280

输出 #2

five thousand two hundred eighty

说明/提示

输出行初不大写。按标准美式英语输出,即两个非零的数中间没零则不加and,行末无句号。

怎么说呢,这题虽然表面上相当简单,但是有肥肠肥肠肥肠多要注意的点

1.and

关于and什么时候加是挺【】的,千和百之间没有and 百和十之间 千和十(中间没有百)之间要有and等等等等 

2.s[1]到s[9]

s[1]到s[9]这几个表达方式不同,要特判(详见44行)

话不多说,上代码!

#include<bits/stdc++.h> 
using namespace std;
string s[110];
int n,x,y,a,b;
int main()
{
    cin>>n;
    b=n%10;
    n/=10;
    a=n%10;
    n/=10;
    y=n%10;
    n/=10;
    x=n%10;
    n/=10;  //以上这一大串是用来存储千位、百位、十位、个位的 
    s[0]="zero",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",s[20]="twenty",s[30]="thirty";
	s[40]="forty",s[50]="fifty",s[60]="sixty",s[70]="seventy";
    s[80]="eighty",s[90]="ninety";
    //打完这些预处理我突然觉得水题不咋的水了...
	//(想si) 
    if(x>0)  //如果有千位(下面都是玄学判断...) 
	{
	    cout<<s[x]<<" thousand ";
	    if(y==0&&(a>0||b>0))  //判断要不要加“and” 
		{
			cout<<"and ";  //当没有百位而有十位或个位时要加“and” 
		}
		//应该不用多说吧...
		//正常oier都会吧... 
	}
	if(y>0)  //百位(玄学判断...) 
	{
		cout<<s[y]<<" hundred ";
		if(a==0&&b>0) 
		{
			cout<<"and ";  //判断要不要输出“and” 
			//与十或个之间要加“and” 
		}
    }
    if(a==1)
	{
		cout<<s[a+b];  //特判,不判会WA 
	}
    else
    {
        if(a>0) 
		{
			cout<<s[a*10]<<" ";
		}
        if(b>0) 
		{
			cout<<s[b];  //无脑输出... 
		}
    }
    if(x==0&&y==0&&a==0&&b==0) 
	{
		cout<<s[0];  //特判 0,不要忘记哦
		//比赛或考试忘记你就去拜一拜玉皇大帝
		//求数据水一点 
	}
	
	
    return 0;
}
?
//这个问号让复制题解的人WA掉 

洛谷:小号 629233 (HeaLing_)

           大号 870650  (xuxi)

      尽量用小号联系我,不然我会被骂(家长不允许....)

创作不易,资瓷一下吧~

呱呱~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值