题解 | #学英语# 感觉这题考的是速度而非技巧
学英语
https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc
#include <bits/stdc++.h>
using namespace std;
string digits[10]={"","one","two","three","four","five","six","seven","eight","nine"};
string tens[10]={"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
string elevens[10]={"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
string places[5]={"","hundred","thousand","million","billion"};
void numToStr(vector<string>& str,int num) //处理<1000的数
{
if(num==0)
return;
if(num/100!=0) //百位
{
str.push_back(digits[num/100]);
str.push_back("hundred");
}
num=num%100;
if(str.size()!=0 && num!=0) //百位和十位,或百位和个位(若十位为0)中间加and
str.push_back("and");
if(num/10!=0) //若十位不为0
{
if(num<=19) //十几的情况单独处理
str.push_back(elevens[num-10]);
else
{
str.push_back(tens[num/10]);
if(num%10!=0) //分开处理,避免在几十整的时候连续输入两个空格造成的格式错误
str.push_back(digits[num%10]);
}
}
else //若十位为0
str.push_back(digits[num]);
}
void outprint(const vector<string> strs) //加空格输出用的,避免去算每个单词前后要怎么加空格
{
if(strs.size()!=0)
for(string str:strs)
cout<<str<<' ';
}
int main(){
long num;
cin>>num;
//n<2000000,所以分组可以固定,每三位划分成一组
int ones=num%1000;
num/=1000;
int thousands=num%1000;
num/=1000;
int millions=num%1000;
num/=1000;
int billions=num;
vector<string> onesStr,thousandsStr,millionsStr,billionsStr; //vector<string>而非string,方便用outprint函数加空格
numToStr(onesStr,ones);
numToStr(thousandsStr,thousands);
numToStr(millionsStr,millions);
numToStr(billionsStr,billions);
if(billionsStr.size()!=0)
{
outprint(billionsStr);
cout<<"billion ";
}
if(millionsStr.size()!=0)
{
outprint(millionsStr);
cout<<"million ";
}
if(thousandsStr.size()!=0)
{
outprint(thousandsStr);
cout<<"thousand ";
}
if(onesStr.size()!=0)
{
outprint(onesStr);
}
return 0;
}

查看19道真题和解析