PAT团队程序设计天梯赛-习题集L1-007 念数字

题目链接

点击打开题目链接

题目分析

只需要知道,char类型和int类型之间是有唯一对应关系,可以进行相互转换的,就可以轻松解答这个题目。

解答的方式有多种,按照常规思路,认为输入的就是一个数字,这样判断正负数十分容易,但是从高位向低位依次截取数字就比较麻烦了,所以纯数字的处理可以转换为字符串进行处理,如示例代码1.

将念数字作为一个单独的方法,能够接收从键盘读入的数字。我们可以定义一个字符串数组,里面的元素是从零到九的拼音。然后我们将读入的这个数字转换成一个字符串,并且依次取出每一个字符,利用ASCII码的性质给它减去零这个字符就可以得到数字本身,而这个数字作为下标的话,刚好对应数组里的拼音。然后打印就可以了。

首先需要从键盘读入要读的数字。然后判断一下是不是负数,正数直接调用读数字的方法,负数需要单独打印一个"fu ",然后调用读数字的方法,参数是他的绝对值。

其实,还可以直接用字符串接收输入,然后直接进行判断和操作。如示例代码2

示例代码1

import java.util.Scanner;
public class L1_007 {
	public static void main(String[] args) {
		//读入一个数字
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();
		input.close();
		//判断是否是负数,并控制打印形式
		if(num < 0) {
			System.out.print("fu" + " ");
			//负数要找到绝对值去读
			int num_abs = Math.abs(num);
			read(num_abs);
		}
		else {
			read(num);
		}
	}
	/**
	* @Title: read 
	* @Description: 读数字 
	* @param n    设定文件 
	* @return void    返回类型 
	* @throws
	 */
	public static void read(int n) {
		//定义一个字符串数组,元素是从零到九的数字的拼音
		String[] arr = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
		int number = n;
		//将数字转换为字符串
		String str = number +"";
		//定义最终要打印的字符串
		String print = "";
		//遍历字符串
		for(int index = 0; index < str.length(); index++) {
			//从左往右取到每一个字符
			char c = str.charAt(index);
			//用取到的字符减字符零,得到的 int 型数字就是数字本身
			//用数字本身作为下标获取拼音
			int arr_index = c - '0';
			//concat(String s) 方法,把指定的字符串连接到这个字符串的末尾
			print = print.concat(arr[arr_index] + " ");
		}
		//trim() 方法,去掉字符串末尾的空格字符
		System.out.println(print.trim());
	}
}

示例代码2 

import java.util.Scanner;

public class L1_007 {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		//输入的字符串
		String str_num = input.nextLine();
		input.close();
		
		String[] arr = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
		
		int length = str_num.length();
		if('-' == str_num.charAt(0)) {
			//是负数
			System.out.print("fu ");
			for(int i = 1; i < length; i++) {
				if(i == length - 1) {
					System.out.print(arr[str_num.charAt(i) - 48]);
				} else {
					System.out.print(arr[str_num.charAt(i) - 48] + " ");
				}
			}
		} else {
			for(int i = 0; i < length; i++) {
				if(i == length - 1) {
					System.out.print(arr[str_num.charAt(i) - 48]);
				} else {
					System.out.print(arr[str_num.charAt(i) - 48] + " ");
				}
			}
		}
	}
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值