编写如下函数: void writer_amount(unsigned int amount,char *buffer);
它的作用把amount的值转换成单词形式,并储存到buffer中,并将其打印出来。
/*********************************************************************
*编写如下函数: void writer_amount(unsigned int amount,char *buffer);
*他把amount的值转换成单词形式,并储存到buffer中,并将其打印出来。
*ps:输入不要超过21亿
**********************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*0~19*/
static char *digits[] = {
"", "ONE ", "TWO ", "THREE ", "FOUR ", "FIVE ", "SIX ", "SEVEN ",
"EIGHT ", "NINE ", "TEN ", "ELEVEN ", "TWELVE ", "THIRTEEN ",
"FOURTEEN ", "FIFTEEN ", "SEXTEEN ", "SEVENTEEN ", "EIGHTEEN ",
"NINETEEN "
};
/*20~90*/
static char *Dozens[] = {
"", "", "TWENTY ", "THIRTY ", "FORTY ", "FIFTY ", "SIXTY ", "SEVENTY ",
"EIGHTY ", "NINETY "
};
/*1000~1000000000*/
static char *magnitudes[] = {
"", "THOUSAND ", "MILLION ", "BILLION "
};
void writer_amount(unsigned int amount,char *buffer)
{
unsigned int value;
static unsigned char frist_flag=0,flag;
/*输入值是否为零判断*/
if(amount == 0 && !frist_flag )
{
strcpy(buffer,"ZERO ");
}
else
{
/*防止1000之类的特殊情况*/
frist_flag=1;
/*10^3倍数判断*/
value = amount/1000;
if(value > 0)
{
flag++;
/*超过1000则递归*/
writer_amount(value,buffer);
}
amount %= 1000;
/*100以上判断*/
value = amount / 100;
if( value > 0 )
{
strcat( buffer,digits[value]);
strcat( buffer,"HUNDRED ");
}
value = amount % 100;
/*20以上判断*/
if( value >= 20 )
{
strcat( buffer, Dozens[ value / 10 ] );
value %= 10;
}
/*个位数或者十几判断*/
if( value > 0 )
strcat( buffer, digits[ value ] );
/*千,百万,十亿判断*/
if( amount > 0 )
strcat( buffer, magnitudes[flag]);
flag--;
}
}
int main(void)
{
unsigned int amount;
char buffer[256];
printf("请输入支票金额阿拉伯数字 : ");
scanf("%d",&amount);
writer_amount(amount,buffer);
printf("\n %s",buffer);
return 0;
}