Fork me on github

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

不知道会不会重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"

  

 

posted @ 2019-08-21 10:59  waka同学  阅读(222)  评论(0)    收藏  举报