不知道会不会重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"
原文:https://www.cnblogs.com/O52LuoTianYi/p/11387462.html