写出这个数

1002 写出这个数 (20 分)

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

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

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

输入样例:
1234567890987654321123456789
输出样例:
yi san wu

我的代码:

import java.util.Scanner;

public class Question1002 {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String n = sc.nextLine();
        int sum = 0;
        for(int i = 0; i < n.length(); i++){
            sum += n.charAt(i) - 48;
        }
        String s = String.valueOf(sum);
        for(int i = 0; i < s.length(); i++){
            switch(s.charAt(i)){
            case '0':
                if (i < 2) System.out.print("ling ");
                else System.out.print("ling");
                continue;
            case '1':
                if (i < 2) System.out.print("yi ");
                else System.out.print("yi");
                continue;
            case '2':
                if (i < 2) System.out.print("er ");
                else System.out.print("er");
                continue;
            case '3':
                if (i < 2) System.out.print("san ");
                else System.out.print("san");
                continue;
            case '4':
                if (i < 2) System.out.print("si ");
                else System.out.print("si");
                continue;
            case '5':
                if (i < 2) System.out.print("wu ");
                else System.out.print("wu");
                continue;
            case '6':
                if (i < 2) System.out.print("liu ");
                else System.out.print("liu");
                continue;
            case '7':
                if (i < 2) System.out.print("qi ");
                else System.out.print("qi");
                continue;
            case '8':
                if (i < 2) System.out.print("ba ");
                else System.out.print("ba");
                continue;
            case '9':
                if (i < 2) System.out.print("jiu ");
                else System.out.print("jiu");
                continue;
            default:
                break;    
            }
        }
    }    
}

 最终提交只有 13 分,很纳闷,不知道哪里出问题了!

 自己又多给了几组数据测试了一下,发现上面的代码对于输入末尾是 0 的数字都会输出格式出错,既然知道哪里错了,那么改起来就简单了,分别将 15、19、23、...、51 行修改一下就好了,将原先的xxx 修改成 xxx就可以提交得满分了!代码如下:

import java.util.Scanner;

public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String n = sc.nextLine();
        int sum = 0;
        for(int i = 0; i < n.length(); i++){
            sum += n.charAt(i) - 48;
        }
        String s = String.valueOf(sum);
        for(int i = 0; i < s.length(); i++){
            switch(s.charAt(i)){
            case '0':
                if (i > 0) System.out.print(" ling");
                else System.out.print("ling");
                continue;
            case '1':
                if (i > 0) System.out.print(" yi");
                else System.out.print("yi");
                continue;
            case '2':
                if (i > 0) System.out.print(" er");
                else System.out.print("er");
                continue;
            case '3':
                if (i > 0) System.out.print(" san");
                else System.out.print("san");
                continue;
            case '4':
                if (i > 0) System.out.print(" si");
                else System.out.print("si");
                continue;
            case '5':
                if (i > 0) System.out.print(" wu");
                else System.out.print("wu");
                continue;
            case '6':
                if (i > 0) System.out.print(" liu");
                else System.out.print("liu");
                continue;
            case '7':
                if (i > 0) System.out.print(" qi");
                else System.out.print("qi");
                continue;
            case '8':
                if (i > 0) System.out.print(" ba");
                else System.out.print("ba");
                continue;
            case '9':
                if (i > 0) System.out.print(" jiu");
                else System.out.print("jiu");
                continue;
            default:
                break;    
            }
        }
    }    
}
最后修改:2019 年 04 月 28 日 09 : 22 PM

发表评论