CF535A Tavas and Nafas 题解
Content
请输出整数 \(s\) 的英文写法。
数据范围:\(0\leqslant s\leqslant 99\)。
Solution
直接对应打表即可。
- 当 \(0\leqslant s\leqslant 19\),直接特判对应输出即可。
- 当 \(20\leqslant s\leqslant 99\),碰到整十数就先输出对应的英文单词,如果后面还有数,先加上一个连字符,再输出个位上的数字。
建议做完这题目之后再去做做 P1617。
Code
const string num[11] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
const string ty[11] = {"", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
const string teen[21] = {"", "", "", "", "", "", "", "", "", "", "", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
int a[5], n, cnt;
int main() {
scanf("%d", &n);
int tmp = n;
while(tmp) {
a[++cnt] = tmp % 10;
tmp /= 10;
}
int teens = a[2] * 10 + a[1];
if(cnt == 2) {
if(teens >= 11 && teens <= 19)
cout << teen[teens];
else if(!a[1]) {
if(a[2] == 1) cout << ty[1];
else cout << ty[a[2]];
}
else
cout << ty[a[2]] << '-' << num[a[1]];
} else
cout << num[a[1]];
return 0;
}