1

我想创建一个程序,其中用户将键入一个数字,该程序将判断它是否可以被 3 整除。但是%、/、+、*不能在程序中使用。这里有人对如何做到这一点有一些想法吗?

4

5 回答 5

6
public static void main(String[] args) {
    String number = "123456";

    int sum = 0;
    for (char c : number.toCharArray()) {
        sum = sum - (0 - c) - '0';
        while (sum >= 3) {
            sum -= 3;
        }
    }
    System.out.print("divisible by 3? ");
    System.out.println(sum == 0);
}

或者,您可以继续减去 3,直到您的数字为 0(可被 3 整除)或 <0:不能被 3 整除。

ps:如果要处理负数需要调整

于 2012-07-18T10:04:38.897 回答
3

十分简单...

boolean divisibleBy3(int n) {
    return (""+n).matches("([0369]|[147]([0369]|[147][0369]*[258])*([" +
                          "258]|[147][0369]*[147])|[258]([0369]|[258]" +
                          "[0369]*[147])*([147]|[258][0369]*[258]))*");
}
于 2012-07-18T10:07:06.953 回答
2

如果所有数字的总和也可被 3 整除,则该数字可被该数字整除。您可以迭代该过程,直到有一个小于 10 的数字并将其与已知除数(3,6 和 9)进行比较

由于它很可能是一个游戏或家庭作业并且你可以使用+你可以简单地使用减去两次:a - - b相当于a + b

于 2012-07-18T10:03:29.527 回答
1

假设您可以使用 - 运算符然后

bool divBy3(int n)
{
  while (n >= 0)
  {
    n -= 3;
  }

  return n == 0;
}

如果 n 可以被 3 整除,则返回 true,否则返回 false。请注意,这确实效率低下!使用 % 运算符会好得多。

于 2012-07-18T10:10:03.080 回答
0

在二进制表示中被 3 整除就像在十进制 (10+1) 中被 11 整除:偶数位的数字总和减去奇数位的数字总和反过来又能被 3 整除(可能是 0)。

于 2012-07-18T11:36:33.283 回答