念整数——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(" ");
            }
        }

    }

}

原文地址:https://www.cnblogs.com/daimasanjiaomao/p/10876897.html

时间: 2024-10-07 20:10:03

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

中国MOOC_零基础学Java语言_期末考试的编程题_1二进制的前导的零

期末考试的编程题 返回 这是期末考试的编程题,在60分钟内,你可以多次提交,直到正确为止. 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成绩. 1 二进制的前导的零(10分) 题目内容: 计算机内部用二进制来表达所有的值.一个十进制的数字,比如18,在一个32位的计算机内部被表达为00000000000000000000000000011000.可以看到,从左边数过来,在第一个1之前,有27

中国MOOC_零基础学Java语言_第7周 函数_1分解质因数

第7周编程题 查看帮助 返回 第7周编程题 依照学术诚信条款,我保证此作业是本人独立完成的. 温馨提示: 1.本次作业属于Online Judge题目,提交后由系统即时判分. 2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩. 1 分解质因数(5分) 题目内容: 每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数.比如,6可以被分解为2x3,而24可以被分解为2x2x2x3. 现在,你的程序要读入一个[2,10000

二进制的前导的零——mooc《零基础学Java语言》-(浙大翁凯)期末编程题

题目内容: 计算机内部用二进制来表达所有的值.一个十进制的数字,比如18,在一个32位的计算机内部被表达为00000000000000000000000000011000.可以看到,从左边数过来,在第一个1之前,有27个0.我们把这些0称作前导的零. 现在,你的任务是写一个程序,输入一个整数,输出在32位二进制表达下它前导的零的个数. 输入格式: 一个整数,在32位的整数可以表达的范围内. 输出格式: 一个整数,表达输入被表达为一个32位的二进制数时,在第一个1之前的0的数量. 输入样例: 25

中国MOOC_零基础学Java语言_第2周 判断_2信号报告

2 信号报告(5分) 题目内容: 无线电台的RS制信号报告是由三两个部分组成的: R(Readability) 信号可辨度即清晰度. S(Strength)    信号强度即大小. 其中R位于报告第一位,共分5级,用1-5数字表示. 1---Unreadable 2---Barely readable, occasional words distinguishable 3---Readable with considerable difficulty 4---Readable with prac

翁恺老师零基础学JAVA语言第五周数组--投票程序例题-个人理解

// 输入数量不确定的[0,9]范围内的整数,统计每一种数字出现的次数,输入-1表示结束 // 需要一个int[10]的数组来录入每次输入的数字;需要一个n表示每次输入的数字 // num[] = {0,1,2,3,4,5,6,7,8,9},刚好对应0-9这10个数字 Scanner in = new Scanner(System.in); int[] num = new int[10]; int n = in.nextInt(); if(n >= 0 && n <= 9) {

零基础学JAVA语言第五周数组--求平均数例题

package shuzu; import java.util.Scanner; public class Shuzu_pjs { public static void main(String[] args) { // 用户输入一系列数字,然后求出这些数字的平均数,并输出输入数字中大于平均数的数 Scanner in = new Scanner(System.in); System.out.println("你打算输入多少个数值?请输入:"); // 计算平均数,需要有:1.记录输入的

中国MOOC_零基础学Java语言_第7周 函数_2完数

2 完数(5分) 题目内容: 一个正整数的因子是所有可以整除它的正整数.而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数.例如6=1+2+3(6的因子是1,2,3). 现在,你要写一个程序,读入两个正整数n和m(1<=n<m<1000),输出[n,m]范围内所有的完数. 提示:可以写一个函数来判断某个数是否是完数. 输入格式: 两个正整数,以空格分隔. 输出格式: 其间所有的完数,以空格分隔,最后一个数字后面没有空格.如果没有,则输出一个空行. 输入样例: 1 10 输出样例:

中国MOOC_零基础学Java语言_第5周 数组

第5周 数组 5.1 数组 5.2 数组计算 public class Main { public static void main(String[] args) { for (int i = 1; i < 10; i++) { if (prime(i)) { System.out.println(i); } } } public static boolean prime(int x) {// 判断是否素数 boolean isPrime = true;// 默认是素数 if (x == 1 |

翁恺老师零基础学JAVA语言第五周数组--求平均数例题-个人理解

// 用户输入一系列数字,然后求出这些数字的平均数,并输出输入数字中大于平均数的数 Scanner in = new Scanner(System.in); System.out.println("你打算输入多少个数值?请输入:"); // 计算平均数,需要有:1.记录输入的每个数n:输入数的和sum:输入数值的个数cnt: int cnt = in.nextInt(); // 算平均数,定义sum为浮点数 double sum = 0; System.out.println(&quo