PAT乙级 1002 写出这个数
题目
思路分析
- 输入一个小于10^100的数,并求出它们各位数字的和,int或者double显然不够用,所以这里用字符串存储数字
- 用一个for循环把字符串中每个数字提取出来并且累加,用字符减去‘0’可以得到ascll码表中它们相差的位数,由于这里的字符是数字,所以减去‘0’之后可以直接把它转换成int类型
- 之后要把数字转换成对应的拼音输出出来,这里可以创建两个数组,一个用来存放之前计算得到的合,一个用来存放十个数字的拼音。然后用for循环遍历存放数字的数组,将取出的数字作为拼音数组的下标输出出来。例如:数字数组temp[i]=j,拼音数组就输出py[j]
- 最后注意一下每个拼音之间用空格隔开,最后一个拼音后没有空格
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String n = cin.next();
int sum = 0;
//把字符串中保存的数字加起来
for (int i = 0; i < n.length(); i++) {
sum += n.charAt(i)-'0';
}
f(sum);
cin.close();
}
public static void f(int x) {
int[] temp = new int[1000];
String[] py = {"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
int num = 0;
//把数字存入数组
while(x>0){
temp[num] = x%10;
x /= 10;
num++;
}
//把数字数组的值作为拼音数组的下标输出出来
for (int i = num-1; i >= 0; i--) {
int p=temp[i];
//判断是否是最后一个数,如果是最后一个数就不输出空格
if (i==0) System.out.print(py[p]);
else System.out.print(py[p]+" ");
}
}
}