程序设计入门C语言 --- 念整数

题目内容:

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。

如输入1234,则输出:

yi er san si

注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:

fu er san si yi

输入格式:

一个整数,范围是[-100000,100000]。

输出格式:

表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

输入样例:

-30

输出样例:

fu san ling

时间限制:500ms内存限制:32000kb


分析:本题与那道“正序分解整数题型”考查的思路一样,运用的知识点也相同,只不过这次是输出方式变为拼音。这里要借助switch 语句,因为所用的数字都是0~9之间,所以用10个case分支分别表示每一位数字对应的拼音;然后根据读到的每一位数字自动选择要输出的拼音。此外,本题还涉及对于负数的处理,由于负数会对取出每一位数字(涉及取模取余运算)有影响,所以应该单独处理;在程序读取整数之前首先判断正负,若为负数,则首先输出“fu+空格”,然后把该负整数转换为正整数,继续后面运算。

代码:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
   int x = 0;
   int t = 0;//t用来暂存x的数值,因为如果用x参与运算,出了while循环会变为0,对后续读取每一位数字有影响
   int mask = 1;//mask用于每次模除的被除数,最后所得的值即为从高位到低依次取出的数字
   scanf("%d", &x);
   t = x;
   if (x<0)
   {
	  t = -x;
	  printf("fu ");
	  x = -x;
   }
   while (t > 9)
   {
	  t /= 10;
	  mask *= 10;
   }
   //printf("mask=%d,x=%d\n", mask,x);
   do
   {
	  int d = x / mask;//d表示每次取出的数字
	  switch(d)
	  {
		  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;
	   }
	   if (mask > 9)
	   {
		  printf(" ");
	   }
	   x %= mask;
	   mask /= 10;
   } while (mask > 0);
   return 0;
}

猜你喜欢

转载自blog.csdn.net/melody_1016/article/details/81128405