C和指针_编程练习_第7章_第6题

/*
        编写函数:
        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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值