题解 | #学英语# 感觉这题考的是速度而非技巧
学英语
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; }