gpt4 book ai didi

java - 哪个被认为更好地获取数字的各个数字?除模或字符串 charAt?

转载 作者:行者123 更新时间:2023-11-30 03:19:52 25 4
gpt4 key购买 nike

方法 1:

重复除模运算。

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();

这里将数字转换为字符串不会产生任何开销。

我们还假设它是正数。

最佳答案

在这种特殊情况下,我认为使用字符串表示是合理的。毕竟,您找到的计数本质上与其数字值有关,不如其十进制字符串表示形式 - 如果将其转换为十六进制,您将获得不同的值。

对于更加基本中立的操作,我通常会避免执行字符串转换。

请注意,第二种方法不需要 StringBuffer。我会用:

long num = 123456789;
int count = 0;
String text = String.valueOf(num);
for (int i = 0; i < text.length(); i++) {
char ch = text.charAt(i);
if (ch == '1') {
count++;
}
}

当然,这是假设性能无关紧要 - 根据我的经验,通常情况下是这样。您的第一个选项几乎肯定会更有效,因为第二个选项需要首先将数字转换为字符串。但除非您需要这种效率,否则我会坚持使用最容易理解的代码 - 在这种情况下,我建议使用基于文本的表示形式。

(举个例子:您对第一个示例适用于负数有多大信心?您的第二个示例是否有相同的问题?)

关于java - 哪个被认为更好地获取数字的各个数字?除模或字符串 charAt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31579414/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com