java - 找出数字中位数并打印出来的更快方法?

标签 java digits

我的计算机老师给了我一个问题,找出两位数和三位数字的数量并终止程序(当用户输入 0 时)并打印总共两位数,三位数字和其他数字。

这是终端窗口中的示例输出:

Enter your number: 23
Enter your number: 1
Enter your number: 412
Enter your number: -123
Enter your number: 32332
Enter your number: 12
Enter your number: -1
Enter your number: 0
Two digit numbers : 2
Three digit numbers : 2
Other digit numbers : 3

这是我的程序:

import java.io.*;
public class two_three_digits
{
    static DataInputStream dis = new DataInputStream(System.in);
    static void main()throws IOException
    {
        int two = 0 , three = 0 , oth = 0;
        while(true)
        {
            System.out.print("Enter your number: ");
            int n = Integer.parseInt(dis.readLine());
            n = (int)Math.abs(n);
            int d = 0,cn = n;
            if(n == 0)break;
            else if(n > 9 && n < 100)two++;
            else if(n > 99 && n <1000)three++;
            else oth++;
        }
        System.out.println("Two digit numbers : "+two);
        System.out.println("Three digit numbers : "+three);
        System.out.println("Other digit numbers : "+oth);
    }
}

我想知道是否有更短的方法来完成同样的任务?比如使用 arrays , string 或者 Bitswise operator 等等。 另外,我更希望您能告诉我怎么做的方法而不是简单的程序,因为我是一名正在学习的学生,希望自己解决。

编辑:抱歉,因为我忘记了一个术语——更快这个词实际上是指速度(或多或少,程序的大小)

最佳答案

计算十进制数的位数的一种简单方法是使用 log base 10 .这将为您提供一个十进制值,表示为了获得输入值而将 10 提高到多少次幂。

例如,log10(10) 会给出 1,log10(100) 会给出 2,中间的值会给出 1 到 2 之间的值。你可以取这个结果的 floor,然后加 1 得到给定数字的位数。

关于java - 找出数字中位数并打印出来的更快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701895/

相关文章:

java - HashMap 的迭代器是故障安全的吗?

swift - Swift 中的土耳其身份证号码验证

javascript - 如何仅输入数字和小数 4 位数字

performance - 为什么 `(map digitToInt) . show` 这么快?

C - 将 9 转为 0

java - 多个 Web 服务的 stub 策略?

java - 数据类型 datetime 和 time 在大于或等于运算符中不兼容

java - 一掷千金游戏 Java ArrayList 问题

java - 最佳实践 : Extending or overriding an Android library project class