题解 | #学英语#

学英语

https://www.nowcoder.com/practice/1364723563ab43c99f3d38b5abef83bc

#include <stdio.h>

static char base[][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
static char baseTen[][8] = {"twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
static char unit[][10] = {"", " thousand", " million"};

int main(int argc, char** argv) {
    int input, data[3];
    while(scanf("%d", &input) != EOF) {
        if(input == 0) {
            printf("%s", base[0]);
            continue;
        }
        unsigned char flag = 0;
        for (int i = 0; i < 3; i++) {
            // 通过对1000求余得到后三位数字
            // i=0储存个位数,i=1储存千,i=2储存百万
            data[i] = input % 1000;
            if(data[i]) {
                // flag 逻辑或运算便于之后判断是否需要加单位
                flag = flag | 0x1 << i;
            }
            input /= 1000;
        }
        for(int i = 2; i >= 0; i--) {
            
            if(data[i] / 100) {
                 // 如果百位不是0
                 printf("%s hundred", base[data[i] / 100]);
                 data[i] %= 100;
                 // 如果十位个位有数字
                 if(data[i] % 100) {
                    printf(" and ");
                 }
            }
            if(data[i] >= 20) {
                printf("%s", baseTen[data[i]/10 - 2]);
                data[i] %= 10;
                // 如果个位还有数字,预留一个空格
                if(data[i]) {
                    printf(" ");
                }
            }
            if(data[i]) {
                printf("%s", base[data[i]]);
            }
            //如果标记过
            if(flag & (0x1 << i)) {
                printf("%s", unit[i]);
                flag &= ~(0x1 << i);
                // 取消标记
                // 如果后面还有数字,预留出来空格
                if(flag) {
                    printf(" ");
                }
            }
        }
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务