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;
}

运行结果

相关文章
|
10月前
|
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 查找整数
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 查找整数
63 0
|
9月前
|
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun的功 能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累 加值放入数组中
数列中,第一项为3,后一项都比前一项的值增5。下列给定程序中,函数fun的功 能是:计算前n(4≤n≤50)项的累计和。在累加过程中把那些被4除后余2的当前累 加值放入数组中
【模拟】特别数的和、移动距离、连号区间、错误票据思路详解及代码实现
取出最后一位,然后将n除去最后一位,将刚刚取出的进行判定。
106 0
练习>>代码实现5*5数组的交叉线上数字之和(中间的那个数只需要计算一次)
练习>>代码实现5*5数组的交叉线上数字之和(中间的那个数只需要计算一次)
77 0
课外拓展3.判断回文
递归的方法是真的骚,要知道,递归能适用于什么情况,首先,要进行多次类似的运算,范围越来越小,要有一个结束条件。
89 0
前端工作总结98-判断数组里面是否有某个值
前端工作总结98-判断数组里面是否有某个值
117 0