检查数字是否可以被9整除,而不需要简单的模数

时间:2014-10-04 20:47:21

标签: java division

为学校做了以下作业:

  

要检查给定数字是否可以被9整除,您可以尝试从该数字中取出所有单独数字的总和。当我们得到该总和的结果时,我们可以很容易地检查它是否可以被9整除。

     

编写一个程序,使用这个给定的方法检查一个数字是否可以被9整除。确保中间的所有总和都记下来,如下例所示。

input 2656
19
10
1
no

input -9999542
47
11
2
no

input 91827
27
9
yes

我首先可以使用模运算符,但由于我被告知这样做,我不知道如何解决这个问题。

有人有任何提示吗?

编辑:不允许使用字符串或数组。

2 个答案:

答案 0 :(得分:1)

您可以对所有数字求和,然后检查总和是否可被9整除。使用递归重复逻辑。 E.g。

public class Foo {

    public static void main(String[] args) {
        int input1 = 2656;
        int input2 = -9999542;
        int input3 = 91827;
        System.out.println("\n" + "input " + input1);
        check(input1);
        System.out.println("\n" + "input " + input2);
        check(input2);
        System.out.println("\n" + "input " + input3);
        check(input3);

    }

    public static boolean check(int input) {
        int sum = calculateSum(input);
        System.out.println(sum);
        if (sum < 9) {
            System.out.println("no");
            return false;
        }

        if ((double) sum / 9 == 1.0) {
            System.out.println("yes");
            return true;
        }

        return check(sum);
    }

    private static int calculateSum(int digits)
    {
        int sum = 0;
        digits = digits < 0 ? -1 * digits : digits;
        while ( digits > 0 )
        {
            sum += digits % 10;
            digits /= 10;
        }

        return sum;
    }

}

输出

input 2656
19
10
1
no

input -9999542
47
11
2
no

input 91827
27
9
yes

答案 1 :(得分:1)

int x = Integer.parseInt(args[0]), help = 0, sum= 0;

if (x < 0) {
    x *= -1;
}

do {
    while(x != 0) {
        help = x % 10;
        sum += help;
        x /= 10;
    }

    System.out.println(sum);

    if(sum >= 10) {
        x = sum;
        sum = 0;
    }

}while(x >= 10);

if(sum / 9 == 1) {
    System.out.println("yes");
} else {
    System.out.println("no");
}