C和指针之函数递归实现把amount表示的值转换为单词形式written_amount(unsigned int amount,char *buffer)

来源:互联网 发布:现在淘宝要怎么做 编辑:程序博客网 时间:2024/05/22 06:55

1、题目



 编写函数 
void written_amount(unsigned int amount,char *buffer); 
它把amount表示的值转换为单词形式,并储存于buffer中。这个函数可以在一个打印支票的程序中使用。例如,如果amount的值是16312,那么buffer中存储的字符串应该是 
SIXTEEN THOUSAND THREE HUNDRED TWELVE



2、代码实现

#include <stdio.h>#include <string.h>/** *它把amount表示的值转换为单词形式,并储存于buffer中。 *这个函数可以在一个打印支票的程序中使用。例如,如果amount的值是16312, *那么buffer中存储的字符串应该是 *SIXTEEN THOUSAND THREE HUNDRED TWELVE * */void written_amount(unsigned int amount, char *buffer){     char value1_9[10][10] = { "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE",                              "SIX", "SEVEN", "EIGHT", "NINE" };     char value10_19[10][10] = {"TEN", "ELEVEN", "TWELVE", "THIRTEEN", "FOURTEEN", "FIFTEEN",                              "SIXTEEN", "SEVENTEEN", "EIGHTEEN", "NINETEEN" };     char value_ty[10][10] = { "", "", "TWENTY", "THIRTY", "FORTY", "FIFTY",                              "SIXTY", "SEVENTY", "EIGHTY", "NINETY" };     char value_splite[10][10] = { "HUNDRED", "THOUSAND", "MILLION", "BILLION" };     if (amount == 0)     {        strcat(buffer, value1_9[0]);        return;     }     static int count = 0;     unsigned int tmp = amount / 1000;     if (tmp)     {        ++count;        written_amount(tmp, buffer);     }     printf("amount is %d\n", amount);     int val = amount % 1000;     printf("val is %d\n", val);     if (val == 0)     {        count = 0;        return;     }     if (val >= 100)     {        strcat(buffer, value1_9[val / 100]);        strcat(buffer, " ");        strcat(buffer, value_splite[0]);        val %= 100;     }     if (val >= 20 && val <= 99)     {        strcat(buffer, " ");        strcat(buffer, value_ty[val / 10]);        val %= 10;     }     if (val >= 10 && val < 19)     {        strcat(buffer, " ");        strcat(buffer, value10_19[val % 10]);     }     if (val > 0 && val <= 9)     {        strcat(buffer, " ");        strcat(buffer, value1_9[val]);     }     if (count > 0)     {        strcat(buffer, " ");        strcat(buffer, value_splite[count--]);        strcat(buffer, " ");     }}int main(){    unsigned int num;    scanf("%u", &num);    char buffer[100] = {0};    written_amount(num, buffer);    puts(buffer);}




3、运行结果

1111deMacBook-Pro:dabian a1111$ vim written_amount.c1111deMacBook-Pro:dabian a1111$ gcc -g written_amount.c -o written_amount1111deMacBook-Pro:dabian a1111$ ./written_amount123456789amount is 123val is 123amount is 123456val is 456amount is 123456789val is 789ONE HUNDRED TWENTY THREE MILLION FOUR HUNDRED FIFTY SIX THOUSAND SEVEN HUNDRED EIGHTY NINE





阅读全文
0 0
原创粉丝点击