-9

正如问题所说。我需要计算给定数字的除数数量,比如 x。但限制是除数必须至少有一位与给定数字 x 相同的数字。

说 10 答案将是 2。(1,10,2,5 是除数,但只有 1,10 与 10 共享相同的数字)

4

3 回答 3

2

我认为这应该有效:

private static boolean containCommonDigit(int n1, int n2) {
    for (char c : ("" + n1).toCharArray())
        if (("" + n2).contains("" + c))
            return true;
    return false;
}

public static int countSpecialDivisors(int n) {
    int count = 0;
    for (int i = 1 ; i <= n / 2 ; i++)
        if (n % i == 0 && containCommonDigit(n, i))
            count++;
    return count + 1;  // since we are looping to n/2
}

请注意,我们只是循环到,n/2因为我们知道n除了自身之外,它不会有大于自身一半的除数,这解释了为什么我们在末尾添加 1(显然,n与自身共享至少一个公共数字)。

有关进一步优化的想法,请参阅评论。

于 2012-08-31T17:02:32.183 回答
1

1)您需要找到数字的所有除数,这可能很棘手 - 请参阅http://en.wikipedia.org/wiki/Divisor_function

2)接下来,由数字和它的除数给出 - 你需要提取所有数字,这很简单 - 只需将除以 10 的余数并继续小数部分。将数字放入 Set

3)在集合上使用 removeAll ,如果集合改变 - 那么有共同的数字

用你找到的下一个除数重复步骤 2/3。

于 2012-08-31T17:02:12.277 回答
0

有一种非常简单的方法可以做到这一点。

 public String (int numberToBeFactored){
      String result = "1, ";

      for(int i = 2; i < numberToBeFactored){
           if (numberToBeFactored % i == 0){
               result = result + Integer.toString(i) + ", ";
           }
       }
       result.trim();
       return result; 

   }
于 2012-08-31T17:41:51.073 回答