Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 超除法_Java_C++ - Fatal编程技术网

Java 超除法

Java 超除法,java,c++,Java,C++,如果数字中的每个数字都除以该数字,则整数为超除法。示例128将自身除法,因为128可被1、2和8整除超级除数不能被0整除 Sample Input #1 superDivide(184) Sample Output #1 true Sample Input #2 superDivide(39) Sample Output #2 false Sample Input #3 superDivide(120) Sample Output #3 false 在这里输入代码 pub

如果数字中的每个数字都除以该数字,则整数为超除法。示例
128
将自身除法,因为
128
可被
1、2和8整除
超级除数不能被
0整除

Sample Input #1

superDivide(184)

Sample Output #1

true

Sample Input #2

superDivide(39)

Sample Output #2

false

Sample Input #3

superDivide(120)

Sample Output #3

false
在这里输入代码

public class SuperDivide {

    public static void main(String[] args) {
        SuperDivide obj = new SuperDivide();
        boolean result = obj.checkSuper(1001);
        System.out.println(result);
    }

    public boolean checkSuper(int num){
        //write your code here
        int n1;
        int n2=num;
        if(num%10==0)
        return false;
        while(num>0){
            n1=num%10;
            if(n2%n1==0){
                num=num/10;
                return true;
            }

        }
        return false;


    }

以上代码可以运行到数字,但不适用于3digit,有什么建议吗?

好的,您有一个数字。让我们称之为
num
。显然,我们需要一个
剩余的
,并使用
num
初始化。因为我们根本不想修改
num
,所以让我们友好地声明if
final
。这可以防止我们意外地更改它

最后一个数字,我们称之为
lastDigit
,可以通过剩余的%10确定

现在我们测试
是否lastDigit==0或(num%lastDigit!=0)
->
返回false

否则,我们进一步执行
remaining=remaining/10
并再次测试最后一个数字,直到
remaining
=0。因此,我们可以在
的同时(剩余>0)
循环中包装整个内容


您所做的略有不同,因为您修改了原始的
num
变量,这意味着在第二次测试中,您没有将原始num除以值,而是将修改后的值除以。结果如何?不知道。可能不太正确。

一些逻辑错误,如被零除和返回的错误位置:

以下是工作代码:

public static void main(String[] args) { 
        SuperDivide obj = new SuperDivide();
        boolean result = obj.checkSuper(66);
        System.out.println(result);
    }

    public boolean checkSuper(int num) {
        //write your code here
        int n1;
        int n2 = num;

        while (num > 0) {
            n1 = num % 10;
            if (n1 == 0) {
                return false;
            }
            if (n2 % n1 == 0) {
                num = num / 10;
            } else {
                return false;
            }
        }
        return true;
    }

也许您的方法应该如下所示:

public boolean checkSuper(int num) {
    int n1;
    int n2 = num;
    while(num > 0) {
        if(num % 10 == 0) {
            return false;
        }
        n1 = num % 10;
        if(n2 % n1 == 0) {
            num = num / 10;
        } else {
            return false;
        }
    }
    return true;
}

我想这会管用的

看起来像你的家庭作业…你做了什么来诊断问题?您是否亲自调试过它,并看到中间结果与预期不符的地方?只要一位数字除以一个大数字,您的代码就会返回true。。。并循环永远为第一个数字,其中不除以大的数字…很高兴能帮助!如果您的问题得到解决,请在此接受最佳答案。虽然此代码可以解决提问者的问题,但最好解释它是如何工作的,以及它与提问者尝试过的内容之间的区别。