#include <stdio.h>#include <string.h>static char *digits[] = {"", "ONE ", "TWO ", "THREE ", "FOUR ", "FIVE ", "SIX ", "SEVEN ", "EIGHT ", "NINE ", "TEN ", "ELEVEN ", "TWELVE ", "THIRTEEN ", "FOURTEEN ", "FIFTEEN ", "SIXTEEN ", "SEVENTEEN ", "EIGHTEEN ", "NINETEEN "};static char *tens[] = {"", "", "TWENTY ", "THIRTY ", "FORTY ", "FIFTY ", "SIXTY ", "SEVENTY ", "EIGHTY ", "NINETY " /*注意数组中前两个单元空白的意义*/};static char *magnitudes[] ={"", "THOUSAND ", "MILLION ", "BILLION " };/*对数据进行分组,每三个数组分成一组*/ static void do_one_group( unsigned int amount, char *buffer , char **magnitude){int value;value = amount/1000;if ( value > 0 ){do_one_group( value, buffer, magnitude + 1 );}/*解决三位数的转换*/ amount %= 1000;/*转换百位*/ value = amount/100;if ( value > 0 ){strcat( buffer, digits[value] );strcat( buffer, "HUNDRED ");}/*十位*/value = amount%100; if ( value >= 20 ){strcat( buffer, tens[value/10] );value %=10;}/*转换个位*/ if ( value > 0 ) {strcat( buffer, digits[value] );}/*加上三位一组的信息*/if ( amount > 0 ){strcat( buffer, *magnitude );}}void written_amount( unsigned int amount, char *buffer ){if( amount == 0 ){strcpy( buffer, "ZERO ");}else{*buffer = '/0';do_one_group( amount, buffer, magnitudes );}}int main(){char str[1000];written_amount( 12345, str );printf( "%s/n", str );}