念整数——mooc《零基础学Java语言》-(浙大翁凯)第四周编程题(2)

问题描述:

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

如输入1234,则输出:

yi er san si

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

fu er san si yi

 

输入格式:

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

 

输出格式:

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

 

输入样例:

-30

 

输出样例:

fu san ling

时间限制:500ms内存限制:32000kb
 
错误代码实现:
因为老师在授课过程中讲过如何将一个数逆序输出,所以一开始我想到的就是将输入的数逆序,然后再循环取这个逆序数的个位数进行念整数操作。思路上感觉可行,但是却忽略了极端情况,比如数字1230,对其逆序时数字为321,0却消失了,因此再mooc上测试时有两个用例未通过。
 
import java.util.Scanner;

public class 念整数
{

    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int number=in.nextInt();
        if(number==0) 
        {
            System.out.print("ling");
        }
        if(number<0) 
        {
            System.out.print("fu ");
            number=-number;
        }
        int temp=number;
        int result=0;
        do
        {
            int digit=temp%10;
            temp=temp/10;
            result=result*10+digit;
        }while(temp!=0);
//        System.out.println(result);
        do 
        {
            int digit=temp%10;
            temp=temp/10;
            result=result*10+digit;
        }while(temp!=0);
//        System.out.println(result);
        do 
        {
                int digit1=result%10;
                result=result/10;
                switch(digit1) 
                {
                case 1:
                    System.out.print("yi");
                    break;
                case 2:
                    System.out.print("er");
                    break;
                case 3:
                    System.out.print("san");
                    break;
                case 4:
                    System.out.print("si");
                    break;
                case 5:
                    System.out.print("wu");
                    break;
                case 6:
                    System.out.print("liu");
                    break;
                case 7:
                    System.out.print("qi");
                    break;
                case 8:
                    System.out.print("ba");
                    break;
                case 9:
                    System.out.print("jiu");
                    break;
                }
            if(result>0) 
            {
                System.out.print(" ");
            }
        }while(result!=0);

    }

}

改进代码:

import java.util.Scanner;

public class 念整数改进 
{

    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int cnt=0;
        int temp=0;
        double p=0.0;
        int number=in.nextInt();
        if(number==0) //数字为0时
        {
            System.out.print("ling");
        }
        if(number<0) //数字为负时先输出fu 
        {
            System.out.print("fu ");
            number=-number;//将负值转换为绝对值
        }
        temp=number;
        while(temp>0) 
        {
            temp/=10;
            cnt++;
        }
        while(cnt>0)
        {
            p=Math.pow(10,--cnt);//循环的条件,p等于10的cnt次方
            int first=number/(int)p;
            number=number%(int)p;
            switch(first) 
            {
            case 0:
                System.out.print("ling");
                break;
            case 1:
                System.out.print("yi");
                break;
            case 2:
                System.out.print("er");
                break;
            case 3:
                System.out.print("san");
                break;
            case 4:
                System.out.print("si");
                break;
            case 5:
                System.out.print("wu");
                break;
            case 6:
                System.out.print("liu");
                break;
            case 7:
                System.out.print("qi");
                break;
            case 8:
                System.out.print("ba");
                break;
            case 9:
                System.out.print("jiu");
                break;
            }
            if(cnt>0) 
            {
                System.out.print(" ");
            }
        }

    }

}

 

posted @ 2019-05-16 17:26  代码三脚猫  阅读(1379)  评论(0编辑  收藏  举报