首页 > 解决方案 > 范围内的每个数字都应该能被 n 整除

问题描述

在这里我需要检查数字中的每个数字是否可以被 3 整除,这意味着当我输入 20 和 40 时,代码需要验证 20 到 40 之间数字的每个数字,它应该显示30,33,36,39

我试图做的是获取代码的最后一位数字并检查它是否可整除,我陷入了困境

class Main
{
    public static void main(String[] args) {
        System.out.println("Enter the range for shipment numbers :");
        int n;
        int Duplicate = 0;
        int count = 0;

        Scanner sc = new Scanner(System.in);
        int range1 = sc.nextInt();
        int range2 = sc.nextInt();

        for(int i = range1; i <= range2; i++){
            int num = i;
            int length = String.valueOf(i).length();
            Duplicate = 0;

            for(int j = 1; j <= length; j++)
            {
                n = num % 10;
                num = num / 10;

                if(n % 3 == 0 && i % 3 == 0 ){
                    Duplicate = Duplicate+1;
                    count = count+1;

                    System.out.println(rep);
                    if (Duplicate <= 1)
                        System.out.println(i);
                }
            }

            if (count <= 0)
                System.out.println("Shipment numbers unavailable");
            if (count <= 0)
                break;
        }
    }
}

标签: java

解决方案


为了检查每个数字是否能被 3 整除,您可以用以下代码替换循环。它只是将数字从右向左移动,并使用布尔值来记住到目前为止遇到的所有数字是否都可以通过使用逻辑 AND 被 3 整除。

    for (int i = range1; i <= range2; i++) {
        int num = i;
        boolean isDivisible = true;

        while (num > 0) { 
            // get last (rightmost) digit to inspect
            int n = num % 10;

            isDivisible = isDivisible && (n % 3 == 0);
            // integer-divide by 10 to prepare for next round
            num = num / 10; 
        } 

        if (isDivisible) {
            System.out.println(i);
        }
    }

所示代码的一个弱点是,就像您的原始代码一样,它会查看整个数字,一旦不满足可被 3 整除的标准,它就可以退出,但这很容易修复。


推荐阅读