把数字数值转换成单词形式

《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。你可以选择一种你喜欢的形式。

  1 /*
  2 ** 把非负整数数值转化为单词形式
  3 */
  4
  5 #include <stdio.h>
  6 #include <string.h>
  7
  8 void written_amount( unsigned int amount, char *buffer );
  9
 10 int
 11 main()
 12 {
 13     unsigned int num;
 14     scanf( "%u", &num );
 15     char b[100] = { 0 };
 16
 17     written_amount( num, b );
 18
 19     puts( b );
 20
 21     return 0;
 22 }
 23
 24 /*
 25 ** 函数功能:把amount的值转化为单词形式,结果存储在buffer中
 26 */
 27 void
 28 written_amount( unsigned int amount, char *buffer )
 29 {
 30     /*
 31     ** 数字对应的单词,分为4组
 32     */
 33     char word_1_9[10][6] = { "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE",
 34                             "SIX", "SEVEN", "EIGHT", "NINE" };
 35     char word_10_19[10][10] = {"TEN", "ELEVEN", "TWELVE", "THIRTEEN", "FOURTEEN", "FIFTEEN",
 36                             "SIXTEEN", "SEVENTEEN", "EIGHTEEN", "NINETEEN" };
 37     char word_ty[10][8] = { "", "", "TWENTY", "THIRTY", "FORTY", "FIFTY",
 38                             "SIXTY", "SEVENTY", "EIGHTY", "NINETY" };
 39     char word_div[4][9] = { "HUNDRED", "THOUSAND", "MILLION", "BILLION" };
 40
 41     static int count = 0;  // 记录千分位的个数
 42     unsigned int tmp = amount / 1000;
 43
 44     /*
 45     ** 用递归函数,直到数值< 1000
 46     */
 47     if( tmp )
 48     {
 49         count ++;  // 千分位的个数增加
 50         written_amount( tmp, buffer ); // 递归,处理下一个千分位
 51     }
 52
 53     int val = amount % 1000; // 3位3位地进行转化单词
 54
 55     /*
 56     ** 值大于100,先把百位上的数的单词存到buffer中
 57     ** 后面加上 HUNDRED
 58     ** 把值%100,变成两位数,后续继续处理
 59     */
 60     if( val >= 100 )
 61     {
 62         strcat( buffer, word_1_9[ val / 100 ] );
 63         strcat( buffer, " " );
 64         strcat( buffer, word_div[ 0 ] );
 65         val %= 100;
 66     }
 67
 68     /*
 69     ** 值在20至99之间,先把几十对应的单词加到buffer中
 70     ** 再%10,后续处理个位上的数
 71     */
 72     if( val >= 20 && val <= 99 )
 73     {
 74         strcat( buffer, " " );
 75         strcat( buffer, word_ty[ val / 10 ] );
 76         val %= 10;
 77     }
 78
 79     /*
 80     ** 值在10到19之间,直接把对应的单词加到buffer中
 81     */
 82     if( val >= 10 && val <= 19 )
 83     {
 84         strcat( buffer, " " );
 85         strcat( buffer, word_10_19[ val % 10 ] );
 86     }
 87
 88     /*
 89     ** 值在0到9之间,把对应的单词加到buffer中
 90     */
 91     if( val >= 0 && val <= 9 )
 92     {
 93         strcat( buffer, " " );
 94         strcat( buffer, word_1_9[ val ] );
 95     }
 96
 97     /*
 98     ** 一个千位处理完后,后面加上对应的分位单词"THOUSAND"、"MILLION"等
 99     */
100     if( count > 0 )
101     {
102         strcat( buffer, " " );
103         strcat( buffer, word_div[ count-- ] );
104         strcat( buffer, " " );
105     }
106 }
时间: 2024-08-03 11:32:24

把数字数值转换成单词形式的相关文章

EXCEL 数字统一转换成文本

将excel中的数字统一转换成文本形式.即添加‘. 1.点击数据-分列. 2.分隔符号-下一步. 3.选择文本识别符号,如“‘”分号. 4. 选中文本-完成.

【C语言】将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数)

#include <stdio.h> /* 编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数.负浮点数) 例如:"12.34" 返回12.34 "-123.34" 返回-123.34 函数原型:double my_atof(char *str) {} */ double my_atof(char *str) { double m=0,n=0,x=1; int flag=1; int flag2=0; if(*str=='-') //

【C语言】编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数、负整数)

/* 编写一个函数,将一个数字字符串转换成该字符串对应的数字(包括正整数.负整数) 例如:"12" 返回12 "-123" 返回-123 函数原型:int my_atof(char *str) */ #include <stdio.h> int my_atof(char *str) { int flag=0; int m=0; if(*str=='-') { flag=1; str++; } while(*str!='\0') { if(*str<

将整形数字(int)转换成字符串

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<string.h> #include<string.h> void itoa(int n, char *buf) { int count = 0; char nu; char buf2[128] = { 0 }; //核心算法很简单 就是每次取出各位数字然后把数字转存进数组,中间有一个数组匿置的过程 do

PHP算法--将数字金额转换成大写金额

最近在看一些PHP算法题,遇到一个将数字金额转换成大写金额的小算法题,这里贴出自己的一个例子. 注:这个小算法适用于10万以内的金额. <?php //$num = 12345.67; function RMB_Upper($num) { $num = round($num,2); //取两位小数 $num = ''.$num; //转换成数字 $arr = explode('.',$num); $str_left = $arr[0]; // 12345 $str_right = $arr[1]

数字如何转换成ASCII码字符——谭浩强C课后题4.9

原题如下: 练习4.9  给一个不多于5位的正整数,求 1.它是几位数: 2.分别输出每一位数字: 3.倒序输出各位数字. 思考:1.要求输入为不多于5位的正整数 2.要取出5位中每位的数字 3.要能辨认出前几位的数字0来判断到底是几位数 在取得每位的数字然后转换成ASCII码字符时候,犯了错误. 错误代码为:     A=(char)k/10000; k=k%10000;     B=(char)k/1000; k=k%1000;     C=(char)k/100; k=k%100;    

C语言 将一个数字字符串转换成这个字符串对应的数字(包括正浮点数、负浮点数 函数原型:double my_atof(char *str)

编写一个函数,将一个数字字符串转换成这个字符串对应的数字(包括正浮点数.负浮点数) 例如:"12.34"  返回12.34 "-123.34" 返回-123.34 函数原型:doublemy_atof(char *str) 提示: 需要在函数中判断负号,小数点,还要判断是不是数字字符.在判断小数点时需定义一个计数器来计算小数点后数字字符的个数. #include <stdio.h> #include <math.h> double my_at

SQL 把表中字段存储的逗号隔开内容转换成列表形式

原文:[原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式 我们日常开发中,不管是表设计问题抑或是其他什么原因,或多或少都会遇到一张表中有一个字段存储的内容是用逗号隔开的列表. 具体效果如下图: ------> 从左边图转换成右边图,像这种需求,我们难免会遇到. 今天我写了个存储过程来解决这种问题.主要方式是利用master..spt_values表. 具体存储过程如下: -- Author: LHM -- Create date: 2015-01-10 -- Description: 把

【C语言】数字字符串转换成这个字符串对应的数字。

(1) int ascii_to_integer(char *str)函数实现. 要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数.如果字符串参数包含任何非数字字符,函数就返回零.不必担心算数溢出. 提示:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加. 直接上代码: #include <stdio.h> #include <assert.h> int ascii_to_integer(char *str) { in