7-7 念数字 (15 分)(用数组简化判断过程)

简介: 7-7 念数字 (15 分)(用数组简化判断过程)

7-7 念数字 (15 分)

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出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

我的写法1

// 这个是我的第一种写法用的switch 写的特别长,没有多大参考价值

#include<stdio.h>
int main(void)
{
  int n, m;
  int i;
  char a[20];
  scanf ("%d", &n);
  int flag = 0;
  if (n < 0)
  {
    flag = 1;
    n *= -1;
  }
  m = n;
  for (i = 0; n != 0; i++)
  {
    a[i] = n % 10;
    n /= 10;
  }
  i -= 1;
  if (flag)
  {
    printf ("fu ");
  }
  if (!m)
  {
    printf ("ling");
  }
  else
  {
    while (~i)
    {
      n = a[i];
      i--;
      switch (n)
      {
      case 0 : 
        printf ("ling");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 1 : 
        printf ("yi");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;  
      case 2 : 
        printf ("er");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 3 : 
        printf ("san");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 4 : 
        printf ("si");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 5 : 
        printf ("wu");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 6 : 
        printf ("liu");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 7 : 
        printf ("qi");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 8 : 
        printf ("ba");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;
      case 9 : 
        printf ("jiu");
        m /= 10;
        if (m)
        {
          putchar (' ');
        }
        break;                
      }
    }
  }
  putchar ('\n');
  return 0;
}

我的写法(改进版)

// 使用二维数组简化问题
#include <stdio.h>
#include <string.h>
int main()
{
  int n, flag = 0, i = 0;
  char dig[10][8] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
  char dig2[12][8];
  scanf ("%d", &n);
  if (n < 0)
  {
    flag = 1;
  }
  if (flag)
  {
    printf ("fu ");
    n = -n;
  }
  if (n == 0)
  {
    printf("ling");
  }
  while (n)
  {
    strcpy (dig2[i], dig[n % 10]);
    n /= 10;
    i++;
  }
  i -= 1;
  for (; i >= 0; --i)
  {
    printf ("%s", dig2[i]);
    if (i)
    {
      putchar (' ');
    }
  }
  return 0;
}

运行结果

相关文章
|
4月前
|
算法 搜索推荐 程序员
第四十六练 请以递归方式实现计算整数列表的和
第四十六练 请以递归方式实现计算整数列表的和
38 2
判断若干个点是否前景的习题
判断若干个点是否前景的习题
|
算法 安全 机器人
算法提高:计算几何基础 | 判断包含关系
计算几何是计算机科学的一个重要分支,主要研究几何形体的数学描述和计算机描述,在现代工程和数学领域,以及计算机辅助设计、地理信息系统、图形学、机器人技术、超大规模集成电路设计和统计等诸多领域都有重要的用途。在 ACM 竞赛中,出题相对独立,曾出现过与图论、动态规划相结合的题,大多数计算几何问题用程序实现都比较复杂。常用算法包括经典的凸包求解、离散化及扫描线算法、旋转卡壳、半平面交等。本文介绍计算几何常用算法——包含关系。
142 0
练习>>代码实现5*5数组的交叉线上数字之和(中间的那个数只需要计算一次)
练习>>代码实现5*5数组的交叉线上数字之和(中间的那个数只需要计算一次)
41 0
|
测试技术
字符串a和他许久未见面的同父异母的b(模拟)(思维)
字符串a和他许久未见面的同父异母的b(模拟)(思维)
75 0
|
Python
【python实战】top1 数字组合——有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
【python实战】top1 数字组合——有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
581 0
【python实战】top1 数字组合——有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
|
算法 索引
数组中重复的数字(简单难度)
数组中重复的数字(简单难度)
81 0
数组中重复的数字(简单难度)
|
前端开发
前端工作总结98-判断数组里面是否有某个值
前端工作总结98-判断数组里面是否有某个值
101 0
|
算法 Java 开发者
高频考题!数组中找重复数字(算法 NO.1)
本题来自 LeetCode 中国网站,属于算法面试中的一道经典高频考题。题解由 Doocs 开源社区 leetcode 项目维护者提供。
91 0
高频考题!数组中找重复数字(算法 NO.1)