【问题标题】:how to find most occurring digit of number如何找到出现次数最多的数字
【发布时间】:2025-12-16 17:40:01
【问题描述】:

如何在号码中找到最受欢迎的数字。例如我有数字 222244,出现次数最多的数字是 2。请帮忙。

我有类似的东西,但不太了解方法的第一部分,int j = liczba.charAt(i) - 47; 发生了什么@为什么 47 在这里?谁能解释一下?

int digits[] = new int [10];         
for(int i = 0; i <liczba.length(); i++){
    int j = liczba.charAt(i) - 47;
    digits[j]++;
}

int digit = 0; 
int count = digits[0];
for(int i=1;i <10; i++){
    if(digits[i] >count){
        count = digits[i];
        digit = i;
    }
}
return digit;

【问题讨论】:

  • 别忘了用你正在使用的语言标记它。

标签: java numbers digit


【解决方案1】:

线

int j = liczba.charAt(i) - 47;

将第(i+1)个字符liczba的字符代码减去47。参考ASCII table,47映射为“/”,其ASCII代码为“0”减1。

请注意,我假设如下,因为您的代码似乎是在 Java 中。

  • 字符串索引从零开始,即第一个字符的索引为 0,第二个字符的索引为 1,依此类推
  • 似乎字符和整数可以互换使用,因为字符在内部由整数表示,即字符的 ASCII 码。
  • 也就是说,char 类型实际上是一个整数类型,范围更小

因此,此代码是将字符“0”转换为整数 1,将“1”转换为整数 2,等等。

例如,当第一个字符(liczba.charAt(0))是字符0时,liczba.charAt(0)返回字符'0',也等于数字48——因为'0'有一个ASCII码48 个。

48 与 47 相减得到 1,因此它将字符 '0' 转换为整数 1。

然而似乎此代码可能导致数组索引越界错误(假设从零开始的数组索引)。当数字为'9' 时,此行返回10。这将导致上述错误。除非此代码的语言数组是从 1 开始的。然而,即使在这种情况下,这一行

int count = digits[0];

只会失败。这段代码似乎因常见的Off by one error 而失败了

我相信这行实际上应该是这样的

int j = liczba.charAt(i) - 48;

所以字符'0' 被转换为数字0。

如果这仍然打扰您,您可以将此行更改为

int j = liczba.charAt(i) - '0';

这样会更清楚。减去'1' 的代码和'0' 的代码得到整数1,够清楚:)

【讨论】:

  • 你说得对,应该有 48 个。但我不太明白。 :(