[问题] c 数字转国字

楼主: a346571358 (风吹谁懂)   2018-06-02 11:58:16
开发平台(Platform): (Ex: Win10, Linux, ...)
win8
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
GCC
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
stdio.h
问题(Question):
如何显示成 平常国字标准数字念法
末几位是0 不显示
从最左边起 遇到大于等于一个0
只显示一个零
喂入的资料(Input):
42002500
预期的正确结果(Expected Output):
肆仟贰百万贰仟五百元
错误结果(Wrong Output):
肆仟贰百零零贰百五十零元
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
https://ideone.com/XnET5L
#include <stdio.h>
void p1(int);
void p2(int);
char *dig[] = {"零","壹","贰","参","肆","伍","陆","柒","捌","玖"};
char *fer[] = {"\0","十","百","仟","万","十","百","仟","亿"};
int times=0;
int main()
{
int n;
printf("N = ");
scanf("%d",&n);
p1(n);
printf("元\n");
return 0;
}
void p1(int n)
{
int prefix,curryDig;
if( n < 10){
printf("%s",dig[n]);
p2(times);
}
else{
prefix = n / 10;
times++;
p1(prefix);
times
作者: jerryh001   2018-06-02 12:22:00
开个阵列把国字结果存起来 然后把不要的部份去掉才输出
作者: stupid0319 (征女友)   2018-06-02 12:25:00
我执行你的code得到肆仟贰百零零贰百伍十零元
楼主: a346571358 (风吹谁懂)   2018-06-02 12:26:00
也就是 我不要直接printf 而是存到新阵列里 去掉再印阿 没有万 不好意思打错了
作者: stupid0319 (征女友)   2018-06-02 12:30:00
这个用递回来做感觉不太适合
楼主: a346571358 (风吹谁懂)   2018-06-02 12:31:00
那有什么其他想法吗 欢迎告诉我
作者: stupid0319 (征女友)   2018-06-02 12:33:00
logical先列出来,什么时候要零,什么时候不要零什么时候加万,什么时候加亿,先列出来
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-06-02 12:38:00
要递回也弄个储存空间吧 这会需要知道之前输出什么
作者: stupid0319 (征女友)   2018-06-02 12:38:00
你是Curry粉丝吗?命名要加强一下
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-06-02 12:39:00
最起码要知道上一次输出什么
楼主: a346571358 (风吹谁懂)   2018-06-02 12:40:00
关于储存空间是用一个变量 存进去吗
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-06-02 12:41:00
复杂一点的自动机就有储存 但是一般写递回都不会强调储存空间比较正式的方法是宣告一个阵列或变量 每次递回一直把这个阵列或变量传下去 偷懒可以用全域变量
楼主: a346571358 (风吹谁懂)   2018-06-02 12:43:00
毕竟这个程式就是...一直印出 若改成把输出的值都存到阵列里面 再用条件去限制这阵列来控制输出值呢
作者: MOONRAKER (㊣牛鹤鳗毛人)   2018-06-02 12:46:00
照我看他有一个地方用到储存 就是上次有没有印出零如果上次是零这次还是零就不印出 利用储存会很好克服
楼主: a346571358 (风吹谁懂)   2018-06-02 13:04:00
我还是..先问一下怎么用阵列存国字好了..没事 我现在已经都存在一个阵列了 不过那条件
作者: longlongint (华哥尔)   2018-06-02 13:54:00
zerojudge 中文大写数字. 已废题但有参考资料
楼主: a346571358 (风吹谁懂)   2018-06-02 14:08:00
有办法传回来times回到main函数是对的值吗谢谢楼上所有大大 完工了

Links booklink

Contact Us: admin [ a t ] ucptt.com