Day010 PAT乙级 1002 写出这个数

PAT乙级 1002 写出这个数

题目

思路分析

  1. 输入一个小于10^100的数,并求出它们各位数字的和,int或者double显然不够用,所以这里用字符串存储数字
  2. 用一个for循环把字符串中每个数字提取出来并且累加,用字符减去‘0’可以得到ascll码表中它们相差的位数,由于这里的字符是数字,所以减去‘0’之后可以直接把它转换成int类型
  3. 之后要把数字转换成对应的拼音输出出来,这里可以创建两个数组,一个用来存放之前计算得到的合,一个用来存放十个数字的拼音。然后用for循环遍历存放数字的数组,将取出的数字作为拼音数组的下标输出出来。例如:数字数组temp[i]=j,拼音数组就输出py[j]
  4. 最后注意一下每个拼音之间用空格隔开,最后一个拼音后没有空格

代码

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]+" ");
        }
    }
}
posted @ 2021-05-07 21:35  杰达鲁  阅读(30)  评论(0编辑  收藏  举报