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;
}
posted @ 2021-12-16 14:45  Eason_AC  阅读(33)  评论(0)    收藏  举报