首页 > 其他 > 详细

洛谷题解 P1617 【爱与愁的一千个伤心的理由】

时间:2019-08-21 12:05:13      阅读:79      评论:0      收藏:0      [点我收藏+]

不知道会不会重QAQ

这道题的题目梗概就是:输入一个1~4位的数字,输出它的英文。

我们不妨分类一下:

1位:

直接输出

2位:

十几或几十直接输出

否则输出几十+一位
3位:

几百直接输出

否则输出几百+两位
4位:
几千直接输出

否则输出几千+3位

另外,只要两个位数间有0,且0的两边不为0,输出“and”

注意:记得特判0的英文zero!!!

所以,可以一个个位数循环。献上代码:

#include<bits/stdc++.h>
using namespace std;
char a[6];
int l;
int main()
{
cin>>a;
l=strlen(a);
for(int i=0;i<l;i++)
{
if(i!=l-2)
{
if(a[i]==0&&a[i+1]==0) continue;//如果本身与后一个都为0,直接跳过
if(a[i]==0&&i!=l-1&&a[i+1]!=0) //如果本身是0而下一位不是0才能输出!
{
cout<<"and ";
continue;
}
if(a[i]==1) cout<<"one ";//打表,输出
if(a[i]==2) cout<<"two ";
if(a[i]==3) cout<<"three ";
if(a[i]==4) cout<<"four ";
if(a[i]==5) cout<<"five ";
if(a[i]==6) cout<<"six ";
if(a[i]==7) cout<<"seven ";
if(a[i]==8) cout<<"eight ";
if(a[i]==9) cout<<"nine ";
}//这里判断位数
if(l==4&&i==0) cout<<"thousand ";
if(l==3&&i==0||l==4&&i==1) cout<<"hundred ";
if(l==2&&i==0||l==3&&i==1||l==4&&i==2)
{
if(a[i]==0&&a[i+1]==0) continue;
if(a[i]==0&&a[i+1]!=0) 
{
cout<<"and ";
continue;
}
if(a[i]==1)
{
if(a[i+1]==0) 
{
cout<<"and ";
continue;
}//暴力枚举十位(最麻烦的)
if(a[i+1]==1) cout<<"eleven ";
if(a[i+1]==2) cout<<"twelve ";
if(a[i+1]==3) cout<<"thirteen ";
if(a[i+1]==4) cout<<"fourteen ";
if(a[i+1]==5) cout<<"fifteen ";
if(a[i+1]==6) cout<<"sixteen ";
if(a[i+1]==7) cout<<"seventeen ";
if(a[i+1]==8) cout<<"eighteen ";
if(a[i+1]==9) cout<<"nineteen ";
break;
}
if(a[i]==2) cout<<"twenty ";
if(a[i]==3) cout<<"thirty ";
if(a[i]==4) cout<<"forty ";
if(a[i]==5) cout<<"firty ";
if(a[i]==6) cout<<"sixty ";
if(a[i]==7) cout<<"seventy ";
if(a[i]==8) cout<<"eighty ";
if(a[i]==9) cout<<"ninety ";
}
}
if(strcmp(a,"0")==0) cout<<"zero";//千万不要忘记特判!
return 0;
}

最后补充一句:

if(strcmp(a,"0")==0) cout<<"zero";

 也可以写成

if(a[0]==‘0‘&&strlen(a)==1) cout<<"zero";

但由于是char,所以千万不能直接

a=="0"

  

 

洛谷题解 P1617 【爱与愁的一千个伤心的理由】

原文:https://www.cnblogs.com/O52LuoTianYi/p/11387462.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!