【发布时间】:2015-07-23 17:13:57
【问题描述】:
方法一:
重复Division-modulus 操作。
long num = 123456789;
int count = 0;
while(num > 0)
{
int digit = num % 10;
if(digit == 1)
count ++;
num /= 10;
}
方法2:
将其转换为String,并获取该位置的字符。
long num = 123456789;
int count = 0;
String s = String.valueOf(num);
for(int i = 0; i < s.length(); i++)
{
char ch = s.charAt(i);
if(ch == '1')
count ++;
}
第二次运算不需要每次都取余数和商。 charAt() 方法就足够了。
哪种方法被认为更好,为什么?
编辑 考虑从控制台获取输入。
1st Case:
long num = scanner.nextLong();
2nd Case:
String s = scanner.nextLine();
在这里将number 转换为string 不会产生任何开销。
我们也假设它是正数。
【问题讨论】:
-
为什么要在第二种情况下创建
StringBuffer? (为什么要执行字符串连接?)只需使用String text = String.valueOf(num); -
要获得更好和更详细的答案,请考虑将其发布在Code Review
标签: java string optimization numbers