VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 747|回复: 2

求算法:数字转中文-----------望高手出招!

[复制链接]

2

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-9 15:20:01 | 显示全部楼层 |阅读模式
题目:中文数字
     时间限制 1000 毫秒
     内存限制 32768 K字节

     问题描述
     输入一个整数,输出它用中文的表示形式。
     输入
     输入包含多行,每行一个整数(<=2000000000)。
     输出
     把输入的整数用中文表示出来,每行一个输出。
     输入样例
     12345
     87654321
     10001

     输出样例
     一万二千三百四十五
     八千七百六十五万四千三百二十一
     一万零一
我的算法:
#include <stdio.h>
main()
{
    char *ch[11];
    ch[0]="\0";ch[1]="一";ch[2]="二";ch[3]="三";ch[4]="四";
    ch[5]="五";ch[6]="六";ch[7]="七";ch[8]="八";ch[9]="九";ch[10]="零";
    char *dw[6];
    dw[2]="十";dw[3]="百";dw[0]="千";dw[5]="万";dw[4]="亿";dw[1]="\0";
    char number[11];int last,n,m,i,j,have;
    while(1)
    {
        scanf("%s",number);
        last = 1;have = 0;
        for(i=0;i<11&&number[i]!='\0';i++);
        for(j=0;j<i;j++)  
        {
                n = number[j]-48;
                m = i-j;
                if(have == 0&& m>4 && m<9 && n) have =1;
                if(last == 0 && n) printf(ch[10]);
                printf(ch[n]); if(n) printf(dw[m%4]);
                if(m%4 == 1)
                {
                       if( m == 5 && have) printf(dw[5]);
                       if( m == 9 ) printf(dw[4]);
                }
                last = n;
                                                                                                                 
        }
        printf("\n");                        
    }
}

结果被告之时间超出(时间限制 1000 毫秒),希望高手出招.不胜感激.
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-26 19:15:01 | 显示全部楼层
while(1)语句没有break;
死循环了。
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-8-26 20:30:01 | 显示全部楼层
ch[1]= "一 ";这样也行?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表