PAT 乙级 1002 写出这个数 Java 解决

写在最前:欢迎批评,欢迎任意地方的指正,用你们的优秀的java代码砸死我吧!!

问题————————————

读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。

输入格式:

每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 10^​100​​。

输出格式:

在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。

输入样例:

1234567890987654321123456789

输出样例:

yi san wu

 解题思路:

用java很简单,直接以字符串来读取一行数据,转换成字符数组遍历相加就可以,再把结果变为字符数组遍历,使用switch往结果中添加对应数字的拼音。这里使用了BufferedReader和StringBuilder这两个东西,简单说下BufferReader缓冲读取,速度方面要比Scanner挨个字符地读取要快的多,这个优点在几千个数据的时候就已经变得相当明显,java最大的劣势就是时间,所以要尽量使用速度快的方式。众所周知String其实不算变量,他在赋值和改变的时候是新建一个新的String然后再改变索引,所以不可避免的速度就要慢,StringBuilder是一个变量,修改的时候速度要比String快的多,所以这里使用append()来进行增加。

package not.die.in.here;
//满分20
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class _1002_WriteTheNum {
	public static void main(String[] args)throws IOException {
		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		char[] buf = bf.readLine().toCharArray();//变为字符数组处理
		int sum = 0;
		for(int i=0;i<buf.length;i++) {
			sum+=(buf[i]-48);//减48直接转换成对应的int数值
		}
		char[] result = ((Integer)sum).toString().toCharArray();//和直接转换成字符数组
		StringBuilder sb = new StringBuilder("");
		for(int i=0;i<result.length;i++) {
			switch(result[i]) {//挨个添加拼音
			case '0':sb.append("ling");break;
			case '1':sb.append("yi");break;
			case '2':sb.append("er");break;
			case '3':sb.append("san");break;
			case '4':sb.append("si");break;
			case '5':sb.append("wu");break;
			case '6':sb.append("liu");break;
			case '7':sb.append("qi");break;
			case '8':sb.append("ba");break;
			case '9':sb.append("jiu");break;
			}
			sb.append(" ");//添加空格
		}
		System.out.println(sb.toString().trim());//去除多余空格输出
	}
}

提交截图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值