引言:
上次发了1001已经好几天没有更新了,今天早上写完了1002看见关注用户多了3位,非常开心,最近正赶上疫情爆发,在家准备二遍再刷PAT乙级和甲级。先从乙级开始,为了感谢这几位小伙伴对我的关注,我决定每天更新一题,希望我们在算法的路上越走越远。虽然开学都延迟了,但也希望大家不要浪费这段时间,在家也要好好学习。
正文:
1002 写出这个数 (20分)
读入一个正整数n,计算其各位数字之和,用汉语拼音写出和的每一位数字。
输入格式:
每个测试输入包含 1 个测试用例,即给出自然数n的值。这里保证n小于10100
。
输出格式:
在一行内输出n的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后一个拼音数字后没有空格。
输入样例:
1234567890987654321123456789
输出样例:
yi san wu
题目分析:(这部分可以和代码一起看,代码我也写了注释,方便理解)
①首先给的数字小于10^100,已经超过了int和long的范围,此时必须用String类型来接收数字;
②要计算每一位数字的数字和,所以String类型的要拆分为char数组类型,然后循环对每一位相加。
注意:相加的数字类型是char类型的,从0-9分别代表ASCII码的48-57,所以要减去48才是阿拉伯数字
③每一位的和存入int类型的sum中,然后将int类型的sum转换为String类型的sum,然后放在char类型的数组中,这样操作的目的还是为了方便对每一位进行操作。
④采用switch来对每一位数字进行判断,注意最后一位的后面没有空格,其余每两个之间都有空格。
AC代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
String num=s.next();//num用来接收输入的数字,由于输入的数字很大,
// 超过了int、long的范围,这里用String来接收
char[] single=num.toCharArray();//num中的每一个数字都被拆分开,放到single数组中
//计算求和
int sum=0;//和放在sum中
for(int i=0;i<single.length;i++){
sum+=single[i]-48;
}
//将整型sum转换为String类型的he
String he=String.valueOf(sum);
//把he的每一位存放到char类型的数组中
char wei[]=he.toCharArray();
for(int i=0;i<wei.length;i++){
switch(wei[i]){
case '0':
System.out.print("ling");break;
case '1':
System.out.print("yi");break;
case '2':
System.out.print("er");break;
case '3':
System.out.print("san");break;
case '4':
System.out.print("si");break;
case '5':
System.out.print("wu");break;
case '6':
System.out.print("liu");break;
case '7':
System.out.print("qi");break;
case '8':
System.out.print("ba");break;
case '9':
System.out.print("jiu");break;
}
//如果没有到最后一位,统统输出空格
if(i!=wei.length-1){
System.out.print(" ");
}
}
}
}
关注公众号”算法宝贝“获取更多题目解析