zoukankan      html  css  js  c++  java
  • 念整数——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(" ");
                }
            }
    
        }
    
    }
    吾生也有涯,而知也无涯
  • 相关阅读:
    【SCOI 2011】 糖果
    【POJ 3159】 Candies
    【POJ 1716】 Integer Intervals
    【POJ 2983】 Is the information reliable?
    【POJ 1364】 King
    【POJ 1201】 Intervals
    【POJ 1804】 Brainman
    6月10日省中提高组题解
    【POJ 3352】 Road Construction
    【POJ 1144】 Network
  • 原文地址:https://www.cnblogs.com/daimasanjiaomao/p/10876897.html
Copyright © 2011-2022 走看看