• 念整数——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(" ");
                }
            }
    
        }
    
    }
    吾生也有涯,而知也无涯
  • 相关阅读:
    《Head First》 MVC运用的设计模式
    unity工具 Animator的使用
    服务器搭建 如果搭建KBE开源服务器
    unity 实战图片挖洞Mask(转载)
    unity博客 推荐(不断补充)
    unity实战 UGUI英雄联盟英雄头顶分段式血条
    unity组成 ToLua
    unity实战 UGUI Text 间距和ContentSizeFitter组件的适配
    unity工具 推荐(不断补充)
    各种单例模式的对比分析
  • 原文地址:https://www.cnblogs.com/daimasanjiaomao/p/10876897.html
Copyright © 2020-2023  润新知