【发布时间】:2014-07-11 15:59:44
【问题描述】:
我的计算机老师提出了一个问题,要找出两位数和三位数的个数并终止程序(当用户输入 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 等。
另外我希望你能告诉我如何做的方法而不是简单的程序,因为我是一个学习的学生,希望自己解决它。
编辑:抱歉,因为我忘了用“更快”这个词来形容一件事——我实际上是指速度(或多或少,程序的大小)
【问题讨论】:
-
你可以从高位倒数,而不是检查每个范围的两端。
-
以什么方式更快?速度方面应该很快。
-
虽然不相关,但停止使用
DataInputStream.readLine(),这个方法已经被弃用很久了,我猜从JDK 1.1开始,改用BufferedReader.readLine()或者使用DataInputStream.readUTF() -
不,没有(明显)更快的方法。渐近地说,你不能比线性更好,而且〜6个比较比使用昂贵的
log10函数的所谓optimalizations快得多。