鱼C论坛

 找回密码
 立即注册
查看: 1581|回复: 4

[已解决]念数字 (15分

[复制链接]
发表于 2020-1-12 16:34:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling
1: yi
2: er
3: san
4: si
5: wu
6: liu
7: qi
8: ba
9: jiu

      
   
输入格式:
输入在一行中给出一个整数,如:1234。

提示:整数包括负数、零和正数。

输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。

输入样例:
-600

      
   
输出样例:
fu liu ling ling

下面是我的代码结果不清楚,说格式错误,答案错误
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{

    int a,r;
    scanf("%d",&a);
    int i;
    if(a<0)
    {
        printf("fu ");
        a = -a;
    }
    for(i=0;;i++)
    {
        if(pow(10,i)>a)
        {
            //printf("%d位数\n",i);//判断几位数
            break;
        }
       
    }
    

    while(i>0)
    {
        r = a/pow(10,i-1);
        //d = a/pow(10,i-1);
        a = a - r*pow(10,i-1);
        i--;
        switch(r)
        {
            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("qiu");break;
            case 0:printf("ling");break;
        }
        printf("  ");
    }


    system("pause");
    return 0;
}
最佳答案
2020-1-12 17:50:54
意思差不多
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *py[10] = {"ling", "yi","er","san","si","wu","liu","qi","ba","qiu"};
    char a[100] = {'\0'};
        int i, idx;

    gets(a);
    
        i=0;
    while( a[i]!='\0' )
    {
                if( a[i]=='-' )
                {
                        printf("%s ", "fu");
                        i++;
                        continue;
                }

                idx = (int)a[i]-48;
                if(a[i+1] == '\0')
                        printf("%s", py[idx]);
                else
                        printf("%s ", py[idx]);
                i++;
    }


    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-12 17:25:42 | 显示全部楼层
代码没问题,不过按题义,当然用查字典法最好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-12 17:28:25 | 显示全部楼层
ba21 发表于 2020-1-12 17:25
代码没问题,不过按题义,当然用查字典法最好

老哥,能具体写一下吗。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 17:42:41 | 显示全部楼层
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

char *get_string(char *buff, int number)
{
        char *table[] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
        char data[1024];
        char *p = data;
        char *pointer[1024];
        size_t count = 0;
        bool neg = false;

        if(number < 0)
        {
                number = -number;
                neg = true;
        }

        do
        {
                size_t a = number % 10;
                number /= 10;

                strcpy(p, table[a]);
                pointer[count++] = p;
                while(*p != '\0')
                        ++p;
                ++p;
        }
        while(number);

        p = buff;
        if(neg)
        {
                strcpy(p, "fu");
                p += 2;
                *p++ = ' ';
        }
        for(int i = count - 1; i >= 0; --i)
        {
                strcpy(p, pointer[i]);
                while(*p != '\0')
                        ++p;
                *p++ = ' ';
        }
        *--p = '\0';

        return buff;
}

int main(void)
{
        char buff[1024];
        printf("%s\n", get_string(buff, -1234560));
        return 0;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-12 17:50:54 | 显示全部楼层    本楼为最佳答案   
意思差不多
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
        char *py[10] = {"ling", "yi","er","san","si","wu","liu","qi","ba","qiu"};
    char a[100] = {'\0'};
        int i, idx;

    gets(a);
    
        i=0;
    while( a[i]!='\0' )
    {
                if( a[i]=='-' )
                {
                        printf("%s ", "fu");
                        i++;
                        continue;
                }

                idx = (int)a[i]-48;
                if(a[i+1] == '\0')
                        printf("%s", py[idx]);
                else
                        printf("%s ", py[idx]);
                i++;
    }


    system("pause");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-5 07:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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