本题难度较大,要用到递归的思想
#include <iostream>
#include <string>
#include <vector>
using namespace std;
const string ones[] = {"zero","one","two","three","four","five","six","seven","eight","nine"};
const string tens[] = {"ten","elevent","twelve","thirdteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};
const string twenties[] = {"zero","ten","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};
const int ihundreds[] = {(int)1e2, (int)1e3, (int)1e6, (int)1e9, (int)1e12};
const string hundreds[] = {"hundred","thousand","million","billion"};
string transfer_Eng(long long n) {
// 如果数字是个位数
if (0 <= n && n <= 9) return ones[n];
// 如果数字是十位数(10-19)
if (10 <= n && n < 20) return tens[n % 10];
// 如果数字是十位数(20-99)
if (20 <= n && n < 1e2) {
int one = n % 10;
int ten = n / 10;
string ten_s = twenties[ten];
string one_s;
if (one == 0) { return ten_s; }
else {
one_s = " " + ones[one];
return ten_s + one_s;
}
}
// 如果数字为三位数或者大于三位数
for (int i = 0; i < 4; i++) {
// 递归实现
if (n < ihundreds[i + 1]) {
int inter = n / ihundreds[i];
int rem = n % ihundreds[i];
return transfer_Eng(inter) + " " + hundreds[i] + (rem ? (i ? " " : " and ") + transfer_Eng(rem) : " ");
}
}
return "";
}
int main(){
long long n;
cin >> n;
string res = transfer_Eng(n);
cout << res << endl;
}

京公网安备 11010502036488号