题目内容:http://mooc.study.163.com/learn/ZJU-1000002011#/learn/ojhw?id=1000052000

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

如输入1234,则输出:


  1. yi er san si


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


  1. fu er san si yi



输入格式:

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


输出格式:

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


输入样例:

-30


输出样例:

fu san ling


我的思路:

首先处理0,再对负数输出"fu ",然后转化成整数处理。

对每个整数,先模10得到个位再除以10循环处理,从个位到高位逐个剥离位值存储在整数数组tmp[ ]。

然后从数组的最末位置往0位置开始处理,遇到第一个非0的数就“读”出来,注意第一个读出来的数字前面没有空格。以后的数字读出来之前都有空格输出。

下面的代码在处理-0056 这样的输入会有bug.


#include <stdio.h>

int SIZE = 7;

int main(){
	char* say[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

	int tmp[7]={0};
	int in;
	scanf("%d",&in);
	//in = -30608;
	if(in == 0){
		printf("%s",say[0]);
		return 0;
	}
	else if (in < 0){
		printf("%s","fu ");
		in *= -1;
	}
	
	for(int i = 0;in>0;i++){
		tmp[i] = in % 10;
		in /= 10;
	}
	int begin = 0;
	for(int i = SIZE-1;i >=0; i--){
		if(tmp[i]==0&&!begin)
			continue;
		if(!begin){
			begin = 1;
			printf("%s",say[tmp[i]]);
			continue;
		}
		
		if(begin){
			printf(" %s",say[tmp[i]]);
		}
		
	
	}
	
	return 0;	
}