| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 486 人关注过本帖
标题:一个c练习问一下,我自己写的代码运行除了点bug,没法完全通过,有没有给写 ...
只看楼主 加入收藏
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
结帖率:69.23%
收藏
已结贴  问题点数:2 回复次数:6 
一个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
搜索更多相关主题的帖子: 爱情 美味 
2015-03-29 21:29
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
能不能改成汉字显示?拼音不直观的。

能编个毛线衣吗?
2015-03-29 21:36
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
回复 2楼 wmf2014
可以,我自己再改回来就好了
2015-03-29 22:03
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:2 
程序代码:
#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;
}


修改了一下, 加了n取值范围的检测,对0特殊处理, 不转换负数。

[ 本帖最后由 longwu9t 于 2015-3-30 14:58 编辑 ]
收到的鲜花
  • wmf20142015-03-30 14:57 送鲜花  10朵   附言:好,较精炼。

Only the Code Tells the Truth             K.I.S.S
2015-03-30 14:44
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 3楼 NeQhk
不是那么容易改回来的。用汉字长度固定,拼音长度可变,你得有一个专门定位的算法。

能编个毛线衣吗?
2015-03-30 14:59
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
#include <stdio.h>
void shuzi (int n)
{
        switch (n)
        {
            case 0:printf("ling");break ;
            case 1:printf ("yi");break;
            case 2:printf ("er");break;
            case 3:printf("san");break;
            case 4:printf ("si");break;
            case 5:printf("wu");break;
            case 6:printf("liu");break;
            case 7:printf ("qi");break;
            case 8:printf ("ba");break;
            case 9:printf ("jiu");break;
            default :break;
        }
}
void weishu (int i)
{
    switch (i)
    {
            case 0:printf ("yi");break ;
            case 1:printf ("qian");break;
            case 2:printf ("bai");break;
            case 3:printf("shi");break;
            case 4:printf ("wan");break;
            case 5:printf("qian");break;
            case 6:printf("bai");break;
            case 7:printf ("shi");break;
            default :break;
       }
}
int main ()
{
    int  a[9];
    int i=0,j;
    int n;
    int lag=0;
    long int m=100000000;
    printf ("输入位数:");
    scanf ("%d",&n);
    printf ("按照位数要求输入整数:");
        for (i=9-n;i<9;i++)
     scanf("%d",&a[i]);
     for (i=9-n;i<9;i++)
     printf ("%d",a[i]);
    i=9-n;
   j=9-n;
    while (i<9)
    {
           
           if (a[i]==0)
           {
               if (lag==0){
                    lag=1;
               shuzi (a[i]);
               }
           }
           if (a[i]!=0)
           {
               shuzi(a[i]);
               putchar(' ');
               i++;
               weishu (j);
               putchar (' ');
               lag=0;
           }
           j++;
    }
    return 0;
}
我自己写的,可以编译成功的那个代码我找不到了,
这个是一开始写的,
不知道能不能在这个基础上改改。
2015-03-30 20:08
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 6楼 NeQhk
const char cnum[10][3] = {"", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
楼主把这个二维数组定义成你想要的格式不就结了???

Only the Code Tells the Truth             K.I.S.S
2015-03-30 20:41
快速回复:一个c练习问一下,我自己写的代码运行除了点bug,没法完全通过,有没有 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020222 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved