念整数

2019-10-17  本文已影响0人  Coder_Newson

题目来源:中国大学MOOC——零基础学JAVA

第四周编程题,完整题目如下:

题目内容:

你的程序要读入一个整数,范围是[-100000,100000]。然后,用汉语拼音将这个整数的每一位输出出来。

如输入1234,则输出:

yi er san si

注意,每个字的拼音之间有一个空格,但是最后的字后面没有空格。当遇到负数时,在输出的开头加上“fu”,如-2341输出为:

fu er san si yi

输入格式:

一个整数,范围是[-100000,100000]。

输出格式:

表示这个整数的每一位数字的汉语拼音,每一位数字的拼音之间以空格分隔,末尾没有空格。

输入样例:

-30

输出样例:

fu san ling

本人的解题思路如下,如有不同意见,欢迎讨论。

根据数字范围创建一个长度为6位的整型数组,用于保存用户输入的数;

通过 % 和 / 来得到每一个位置上的数字,添加入数组中,这里有一个问题,比如我输入的是:12345

那么存入数组的时候是这样的:5 4 3 2 1,这个没影响,倒序遍历输出就可以了,关键问题是数字和拼音的映射关系,这里就要用到 switch……case,需要注意的是case :后面要加break;不然每次就只读到最后一个case,这也是我踩过的坑。剩下就简单多了,判断正负,然后输出,注意末尾没有空格这些细节。

完整代码如下:

package www.zhejiang.test04;

import java.util.Scanner;

/**
 * @创建人 wuzengyu
 * @创建时间 2019/10/17
 * @描述
 */

public class Transfer {
    public static void main(String[] args) {
        int num;
        int count = 0;
        int[] number = new int[6];
        Scanner sc = new Scanner(System.in);
        // 接受正确范围数字
        while(true)
        {
            num = sc.nextInt();
            if (num >= -100000 && num <= 100000)
            {
                break;
            }
        }

        // 副本
        int copyNum = num;

        // 得到位数
        while (true)
        {
            if (copyNum < 0)
            {
                copyNum = -copyNum;
            }
            int digit = copyNum % 10;   // 个位
            number[count] = digit;
            count++;
            if (copyNum >=0&&copyNum <=9)
            {
                break;
            }
            copyNum = copyNum / 10;
        }

        if (num < 0)
        {
            System.out.print("fu ");
        }

        String pinyin = "";
        for (int i = count; i > 0;i--)
        {
            switch (number[i-1])
            {
                case 0:
                    pinyin = "ling"; break;
                case 1:
                    pinyin = "yi"; break;
                case 2:
                    pinyin = "er"; break;
                case 3:
                    pinyin = "san"; break;
                case 4:
                    pinyin = "si"; break;
                case 5:
                    pinyin = "wu"; break;
                case 6:
                    pinyin = "liu"; break;
                case 7:
                    pinyin = "qi"; break;
                case 8:
                    pinyin = "ba"; break;
                case 9:
                    pinyin = "jiu"; break;

            }
            if (i != 1)
            {
                System.out.print(pinyin + " ");
            }
            else if (i == 1)
            {
                System.out.print(pinyin);
            }
        }
    }
}

运行结果如下:

负数:

image

正数:

image

个人感觉代码写得多了,但又没有更好的解决思路,如果大家有更好的解决方法,欢迎指教~

上一篇 下一篇

猜你喜欢

热点阅读