/*
编写函数:
void written_amount( unsigned int amount, char *buffer );
它把amount表示的值转换为单词形式, 并存储于buffer中.
这个函数可以在一个打印支票的程序中使用. 例如: 如果amount的值是16 312, 那么buffer中存储的字符串应该是:
SIXTEEN THOUSAND THREE HUNDRED TWELVE
调用程序应该保证buffer缓冲区的空间足够大.
有些值可以使用两种方法进行打印. 例如:
1 200 可以是ONE THOUSAND TWO HUNDRED 或TWELVE HUNDRED.
你可以选择一种你喜欢的形式.
*/
#include <stdio.h>
#include <stdlib.h>
void written_amount( unsigned int amount, char *buffer )
{
unsigned short ReverseAmount[4] = {
0 };
signed char i;
//把amount的值以1000 为基准分步存入数组ReverseAmount中
for( i = 0; amount != 0; amount /= 1000, ++i )
{
ReverseAmount[i] = amount % 1000;
}
//倒序遍历ReverseAmount, 把它表示的值的文字形式存储在字符串buffer中
char *p;
unsigned char hundred, ten, individual; //存储百位, 十位, 个位
for( --i; i >= 0; --i )
{
individual = ReverseAmount[i] % 10; //获取个位
ReverseAmount[i] /= 10;
ten = ReverseAmount[i] % 10; //获取十位
ReverseAmount[i] /= 10;
hundred = ReverseAmount[i] % 10; //获取百位
ReverseAmount[i] /= 10;
switch( hundred ) //将百位数字以文字形式写入buffer
{
case 0:
break; //如果首位是0, 就不用写入buffer了, 直接跳过
case 1:
p = "ONE HUNDRED ";
while( *p != '\0' ) *buffer++ = *p++; break; //把ONE HUNDRED 复制到buffer, 同时buffer向后移动ONE HUNDRED 所占用的长度
case 2:
p = "TWO HUNDRED ";
while( *p != '\0' ) *buffer++ = *p++; break;
case 3:
p = "THREE HUNDRED ";
while( *p != '\0' ) *buffer++ = *p++; break;
case 4:
p = "FOUR HUNDRED ";
while( *p != '\0' ) *buffer++ = *p++; break;
case 5:
p = "FIVE HUNDRED ";
while( *p