- 论坛徽章:
- 1
|
- #include <stdio.h>;
- #define TEN "拾"
- #define HND "佰"
- #define THU "仟"
- #define TTH "万"
- #define HMI "亿"
- #define FILL(A) if(!zflag) \
- strcat(sResult, A); \
- break
- #define FILLW(A) if(!zflag) \
- { \
- tthflag = 1; \
- strcat(sResult, A); \
- } \
- break
- #define FILLY(A) if(!zflag) \
- { \
- hmiflag = 1; \
- strcat(sResult, A); \
- } \
- break
- void main(int argc, char **argv)
- {
- if(argc < 2)
- {
- printf("Usage: %s amt\n", argv[0]);
- exit(0);
- }
- PrintBigMoney(argv[1]);
- exit(0);
- }
- int PrintBigMoney(char *source)
- {
- char sResult[300], intpart[30], decpart[20], *pstr;
- char *BigNum[] = {"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
- int i, intlen, p_int = 0, zheadflag = 1, zflag = 0;
- int tthflag = 0, hmiflag = 0;
- memset(sResult, '\0', sizeof(sResult));
- strcpy(intpart, source);
- if (intpart[p_int] == '-')
- {
- strcat(sResult, "负");
- p_int++;
- }
- pstr = (char *)strstr(intpart + p_int, ".");
- if (pstr != NULL)
- {
- pstr[0] = '\0';
- strcpy(decpart, pstr + 1);
- }
- intlen = strlen(intpart);
- for(i = 0; i < intlen; i++)
- {
- if(intpart[i] < '0' || intpart[i] >; '9')
-
- {
- printf("part of int is not valid\n");
- exit(0);
- }
- }
- for(i = 0; i < strlen(decpart); i++)
- {
- if(decpart[i] < '0' || decpart[i] >; '9')
- {
- printf("part of dec is not valid\n");
- exit(0);
- }
- }
- if(intlen >; 12)
- printf("Warning: number is too large to translate, result is pos
- sibly not accuracy!\n");
- if(atol(intpart) == 0)
- strcat(sResult, BigNum[0]);
- for (i = p_int; i < intlen; i++)
- {
- if (intpart[i] == '0')
- {
- if(zheadflag)
- continue;
- else
- zflag = 1;
- }
- else
- {
- zheadflag = 0;
- if(zflag)
- {
- strcat(sResult, BigNum[0]);
- zflag = 0;
- }
- strcat(sResult, BigNum[intpart[i] - '0']);
- }
- switch(intlen - i)
- {
- case 2:
- FILL(TEN);
- case 6:
-
- FILLW(TEN);
- case 10:
- FILLY(TEN);
- case 14:
- FILLW(TEN);
- case 18:
- FILLY(TEN);
- case 3:
- FILL(HND);
- case 7:
- FILLW(HND);
- case 11:
- FILLY(HND);
- case 15:
- FILLW(HND);
- case 19:
- FILLY(HND);
- case 4:
- FILL(THU);
- case 8:
- FILLW(THU);
- case 12:
- FILLY(THU);
- case 16:
- FILLW(THU);
- case 20:
- FILLY(THU);
- case 5:
- case 13:
- if(!zflag)
- strcat(sResult, TTH);
- else
- {
- if(tthflag)
- strcat(sResult, TTH);
- }
- break;
- case 9:
- tthflag = 0;
- case 17:
- strcat(sResult, HMI);
- break;
- }
- }
- strcat(sResult, "元");
- if ((strlen(decpart) != 0) && (atol(decpart) != 0))
- {
- for (i = 0; i < strlen(decpart); i++)
- {
- if (decpart[i] >;= '0' && decpart[i] <= '9')
- strcat(sResult, BigNum[decpart[i] - '0']);
- if (i == 0)
- strcat(sResult, "角");
- if (i == 1)
- strcat(sResult, "分");
- }
- }
- else
- strcat(sResult, "整");
- printf("%s\n", sResult);
- }
复制代码 |
|