取数字并输出其英文单词的算法

Cha*_*hak 3 c algorithm linguistics

我想在C中制作一个程序,要求用户输入一个数字,然后用英语打印该数字.

例如:

if(INPUT == 1) then print ONE
if(INPUT == 2) then print TWO
Run Code Online (Sandbox Code Playgroud)

等等.它可以使用switch-case制作,如果是,但它会使代码冗长.对于少数数字它没关系,但如果我们必须写入100,那么它将是冗长的.

对此有简短的算法或想法吗?

kal*_*yan 10

你可以使用下面的,但这打印只有数千.我这样做是为了解决一些特定的编程问题.这就是为什么我没有超过数千人.但不难扩大数量.此外,该程序仍然可以优化或更清晰.

#include <stdio.h>
#include <string.h>

void print(int num) {
    char digit [21][10] = { "", "one", "two", "three", "four", "five", "six", "seven",
                          "eight", "nine", "ten", "eleven", "twelve", "thirteen", 
                          "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                          "nineteen"};
    char tens [11][10] = { "", "", "twenty", "thirty", "forty", "fifty", "sixty", 
                         "seventy", "eighty", "ninety"};
    char str[1000] = {0};
    int prev=0, div=1000;
    strcpy(str, "");

    while(div) {

        if ((num / div) % 10 > 0 || (div == 10 && (num%100) > 0)) { 

            if (prev) {
                strcat(str, "and");
                prev = 0;
            }

            switch(div) {
            case 1000:
                strcat(str, digit[(num / div) % 10]);     
                strcat(str, "thousand");
                prev = 1;
                break;
            case 100:
                strcat(str, digit[(num / div) % 10]);     
                strcat(str, "hundred");
                prev = 1;
                break;
            case 10:
                if ( (num%100) >= 10 && (num%100) <= 19)
                    strcat(str, digit[num%100]);
                else {
                    strcat(str, tens[(num%100)/10]);
                    strcat(str, digit[num%10]);
                }
                break;
            }
        }

        div /= 10;
    }
    printf("%d %s\n", num, str);

}
int main(int argc, char **argv) {

    long sum = 0;
    int count = 0;

    if (argc <= 1) {
        fprintf(stderr, "wrong number of arguments\n");
        return -1;
    }

    print(atoi(argv[1]));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)