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)