思路分享
人民币转换
http://www.nowcoder.com/questionTerminal/00ffd656b9604d1998e966d555005a4b
做了十几道题唯一一次弄出排行第一的答案,得炫耀一下
思路很简单
- 每一位只要数字不为
0|1
其单位必须输出 - 以
1000000
为例,将之看作10 0000. 0000
共10位(序号为0-9位),从第0
位开始处理:- 第
0
位和第1
位单位为空''
,值恒为0
,其余单位见代码units
数组。 - 若位置
position
余4
得0
则此处单位必须输出(代码中的position
值实际上相当于本文中position-2
),此处的0
必不输出零
,因此元、万位不输出0
但必须输出单位; - 当前位置的前一位置出现过
0
,则当前的0
不输出零
,因此拾、佰、仟位不输出0。 - 若位置
position
余4
得1
说明是拾位,则此处若为1
不输出。
- 第
- 比元位低的位即使满足输出
零
的条件也不输出。 - 若当前处理到的位置单位为元,但组装出的字符串仍为空,则先在字符串中装入
整
。
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct CH Ch; struct CH { char ch[4]; Ch *next; /* data */ }; int main() { char number[10][4] = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; char unit[11][4] = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"}; // char unit[13][4] = {"","","分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿"}; char integer[4] = "整"; long long num = 0; double value; int position; int zero = 0; int posnum = 0; Ch *ptr = 0; Ch *header = 0; while (scanf("%lf", &value) != EOF) { position = 0; // position = 2; // 不加会变成0.28 num = (value + 0.0001) * 100; zero = 0x02; while (num) { // 上一个非0,当前不是起始位,方可输出0 // 不是十位方可输出1 // 当前是起始位,或当前位不为0方可输出单位 if (!header && position > 1) { ptr = (Ch *)malloc(sizeof(Ch)); ptr->next = header; header = ptr; strcpy(ptr->ch, "整"); } posnum = num % 10; if ((0x01 & zero) || posnum) { ptr = (Ch *)malloc(sizeof(Ch)); ptr->next = header; header = ptr; strcpy(ptr->ch, unit[position]); } if (posnum == 0) { if (!zero && position > 1) { ptr = (Ch *)malloc(sizeof(Ch)); ptr->next = header; header = ptr; strcpy(ptr->ch, number[posnum]); } } else if (posnum == 1) { if (position != 3 && position != 7) { ptr = (Ch *)malloc(sizeof(Ch)); ptr->next = header; header = ptr; strcpy(ptr->ch, number[posnum]); } } else { ptr = (Ch *)malloc(sizeof(Ch)); ptr->next = header; header = ptr; strcpy(ptr->ch, number[posnum]); } num /= 10; position++; if (posnum) { zero &= 0xfd; } else { zero |= 0x02; } if ((position + 2) % 4 == 0) { zero |= 0x01; } else { zero &= 0xfe; } } printf("人民币"); while (header) { ptr = header->next; printf("%s", header->ch); free(header); header = ptr; } printf("\n"); } return 0; }