如何用更简洁的C语言实现读取20-89整数并输出对应英文表示
优化实现方案
核心思路是利用字符串数组的下标和数值的对应关系做直接映射,完全省略冗余的多分支if判断,代码可以精简到只有几行逻辑。
优化后代码
#include <stdio.h> int main() { int N; scanf("%d", &N); // 下标对应十位数值,2→twenty、3→thirty...,前两位占位用不到 const char *tens[] = {"", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty"}; // 下标对应个位数值,0为空、1→one... const char *ones[] = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; printf("%s", tens[N / 10]); if (N % 10 != 0) { printf(" %s", ones[N % 10]); } printf("\n"); return 0; }
方案说明
- 因为题目限定输入范围是2089,十位只会取28,直接用十位数值作为字符串数组的下标就能直接拿到对应的英文单词,不需要额外判断
- 个位为0时不额外输出内容,个位非0时加空格输出对应个位单词即可,逻辑清晰简洁
- 相比原方案省去了14个冗余的if判断和两个无意义的整数数组,执行效率也更高
内容的提问来源于stack exchange,提问作者PwNzDust
相关产品推荐
相关产品推荐

