【PTA】学校训练赛

记录一些自己不太熟或者不会的题目和题型,以供后面参考和回顾

01

2021.12.4

币值转换 (20 分)

来源:7-23 币值转换 (20分)-java_gwgw0621的博客-CSDN博客

还是没有理解 处理特殊情况0,重复的0,末尾的0,和重复的万后面的0这一块

import java.util.Scanner;

public class demo4 {
    
    

    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        // 首先排除输入为0的情况
        if (s.equals("0")) {
    
    
            System.out.println("a");
            System.exit(0);// 退出程序
        }
        // 输入是按照从高到低,但是我们处理需要从个位到亿位.
        // 将输入的字符串反转
        StringBuffer sb = new StringBuffer(s);
        sb.reverse();
        s = new String(sb);
        // 将字符串转换为数组
        char[] ch = s.toCharArray();

        String str = "";// 最终的字符串
        int start = 0;// 标记是末尾的0或者万后面的0
        int f = 0;// 标记重复的0
        for (int i = 0; i < ch.length; i++) {
    
    
            // a-z:97-122,A-Z:65-90,0-9:48-57
            char a = (char) (ch[i] + 49);// 取出字符数组,并将其转化为a~j 49??
            String s1 = "";// 存放大写的字母
            switch (i) {
    
    
                case 1:
                case 5:
                    s1 = "S"; // 十
                    break;
                case 2:
                case 6:
                    s1 = "B"; // 百
                    break;
                case 3:
                case 7:
                    s1 = "Q"; // 千
                    break;
                case 4:
                    s1 = "W"; // 万
                    break;
                case 8:
                    s1 = "Y"; // 亿
                    break;
            }
            if (a == 'a') {
    
    // 判断等于0的情况  ’a':0
                if (i == 4) {
    
    // 判断是不是万位
                    str += "W";// 万位为0时需要输出W,
                    start = 0;// 并且万位后面的0也需要输出 // 例 300210 三十万零两百一十
                    f = 0;
                }
                if (f == 0 && start == 1) {
    
     // 例 302010 三十万两千零一十  需要输出这个零
                    //当这个0不重复,并且不是末尾的0时,只需要输出一个0,并将重复0标志打开
                    //只有输出非0的位时才会关闭这个标志
                    str += "a";
                    f = 1;
                }
            } else {
    
    //处理不为0的情况
                start = 1;//只要输出了不为0的数字,就会关闭重复0标志f,和打开末尾0标志start
                f = 0;
                str = str + s1 + a;// 这里是逆序存放
            }
        }
        //最后再将字符串反转回来输出
        sb = new StringBuffer(str);
        sb.reverse();
        System.out.println(sb);
    }
}

300210
dSWacBbS

Supongo que te gusta

Origin blog.csdn.net/Jruo911/article/details/121937257
Recomendado
Clasificación