一个c练习问一下,我自己写的代码运行除了点bug,没法完全通过,有没有给写一个,是小程序。
输入一串数字9位数以内比如120 0013
就输出拼音
yi bai er shi wan ling yi shi san
我写的程序是在120万的万字没有打印出来
直接就yi bai er shi ling san 了
有没有帮忙写一段
如果输入1800
就输出yi qian ba bai
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> typedef struct { int data; char unit[3]; } item; const char cnum[10][3] = {"", "一", "二", "三", "四", "五", "六", "七", "八", "九"}; int main(void) { int i, j, len, n; char p[39] = {0}; item num[9] = { {0, "亿"}, {0, "千"}, {0, "百"}, {0, "十"}, {0, "万"}, {0, "千"}, {0, "百"}, {0, "十"}, {0, "\0"} }; if((scanf("%9d", &n)) != 1) { puts("输入值有误! 退出程序..."); exit(EXIT_FAILURE); } if(n > 0) { j = (int)log10(n); len = j + 1; for(i = 8 - j; i < 9; i++) { num[i].data = (int)(n / pow(10, j--)) % 10; } for(i = 0; i < 8; i++) { if(num[i].data) { strcat(p, cnum[num[i].data]); strcat(p, num[i].unit); } else if(i > 2 && i > 8 - len && num[i].data == 0 && num[i + 1].data != 0) { strcat(p, "〇"); } else if(i == 4 && num[4].data == 0 && len > 5 && (num[1].data || num[2].data || num[3].data)) { strcat(p, "万"); } } if(num[9].data) strcat(p, cnum[num[i].data]); } else if(n == 0) { strcat(p, "〇"); } else { puts("输入值有误! 退出程序..."); exit(EXIT_FAILURE); } puts(p); return 0; }